XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   0

TABLE OF CONTENTS   



   (2)     177  XMDRIVER LOCAL STORAGE

   (3)     231  CONTROL_INIT - INITIALIZE DMC-11 DEVICE

   (4)     257  UNIT_INIT - INITIALIZE THE DMC-11 UNIT

   (5)     284  XMITFDT - TRANSMIT I/O OPERATION FDT ROUTINE

   (6)     310  RCVFDT - RECEIVE I/O OPERATION FDT ROUTINE

   (7)     388  SETMODEFDT - SET MODE I/O OPERATION FDT DISPATC

   (8)     517  STARTIO - START XMIT OR SETMODE I/O OPERATION

   (9)     583  XMIT - START XMIT I/O

   (10)    630  START - START UNIT 

   (11)    799  CHANGE MODE AND CHARACTERISTIC DATA

   (12)    825  ACP_RECEIVE - PRIVILEGED RECEIVE SUBROUTINE

   (13)    867  FILLFREELIST - FILL MESSAGE FREE LIST

   (14)    902  STARTRECEIVE - START RECEIVE ON UNIT

   (15)    967  PORT_INTR - DMC-11 PORT READY INTERRUPT SERVICE

   (16)   1018  RQSTRCVSTRT/RQSTXMITSTRT/

   (17)   1088  CONTROL_INTR - DMC11 CONTROL INTERRUPT

   (18)   1187  PURGE_DATAPATH

   (19)   1215  RCVDONEFORK - RECEIVE DONE FORK PROCESS

   (20)   1249  FINISH_RCV_IO - FINISH RECEIVE QIO PROCESSING

   (21)   1299  XMITDONEFORK - TRANSMIT DONE FORK PROCESS

   (22)   1338  REGDUMP - DMC-11 ERROR LOG AND DIAGNOSTICS REGI

   (23)   1371  POKE_USER - POKE USER PROCESS ON ATTENTION COND

   (24)   1408  TIMEOUT - TIMEOUT 

   (25)   1433  ERRORFORK - ERROR FORK  RPOCESS

   (26)   1491  SHUTDOWN - SHUT DOWN UNIT 

   (27)   1589  CANCELIO - CANCEL I/O ON UNIT, INTERNAL AND EXT

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   1

V06                                                                                                                              (1)



                                     0000     1 	.TITLE	XMDRIVER - VAX/VMS DMC-11 DRIVER

                                     0000     2 	.IDENT	/V06/

                                     0000     3 ;

                                     0000     4 ; COPYRIGHT (C) 1978

                                     0000     5 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

                                     0000     6 ;

                                     0000     7 ; THIS SOFTWARE IS FURNISHED UNDER  A LICENSE FOR USE ONLY  ON  A

                                     0000     8 ; SINGLE COMPUTER SYSTEM AND MAY BE  COPIED ONLY WITH  THE INCLU-

                                     0000     9 ; SION OF  THE  ABOVE  COPYRIGHT NOTICE.  THIS SOFTWARE,  OR  ANY

                                     0000    10 ; OTHER COPIES THEREOF, MAY NOT BE  PROVIDED  OR  OTHERWISE  MADE

                                     0000    11 ; AVAILABLE TO ANY OTHER PERSON EXCEPT  FOR  USE  ON  SUCH SYSTEM

                                     0000    12 ; AND TO  ONE WHO AGREES  TO  THESE LICENSE  TERMS.  TITLE TO AND

                                     0000    13 ; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.

                                     0000    14 ;

                                     0000    15 ; THE INFORMATION IN THIS SOFTWARE  IS  SUBJECT TO CHANGE WITHOUT

                                     0000    16 ; NOTICE AND SHOULD NOT BE CONSTRUED  AS  A COMMITMENT BY DIGITAL

                                     0000    17 ; EQUIPMENT CORPORATION.

                                     0000    18 ;

                                     0000    19 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS

                                     0000    20 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.

                                     0000    21 ;++

                                     0000    22 ; FACILITY:

                                     0000    23 ;

                                     0000    24 ;	VAX/VMS DMC-11 I/O DRIVER

                                     0000    25 ;

                                     0000    26 ; ABSTRACT:

                                     0000    27 ;

                                     0000    28 ;	THIS MODULE CONTAINS THE DMC-11 DRIVER FDT ROUTINES,

                                     0000    29 ;	INTERRUPT DISPATCHER, INTERRUPT SERVICE AND FORK ROUTINES.

                                     0000    30 ;

                                     0000    31 ; AUTHOR:

                                     0000    32 ;

                                     0000    33 ;	R.HEINEN 24-AUG-77

                                     0000    34 ;--

                                     0000    35 ;

                                     0000    36 ; EXTERNAL SYMBOLS

                                     0000    37 ;

                                     0000    38 	$ACBDEF				; DEFINE AST CONTROL BLOCK

                                     0000    39 	$CRBDEF				; DEFINE CRB

                                     0000    40 	$DDBDEF				; DEFINE DDB

                                     0000    41 	$IDBDEF				; DEFINE IDB

                                     0000    42 	$IODEF				; DEFINE I/O SYMBOLS

                                     0000    43 	$IPLDEF				; DEFINE IPLS

                                     0000    44 	$IRPDEF				; DEFINE I/O PACKET

                                     0000    45 	$MSGDEF				; DEFINE SYSTEM MESSAGES

                                     0000    46 	$PCBDEF				; DEFINE PCB

                                     0000    47 	$UBADEF				; DEFINE UBA VALUES

                                     0000    48 	$UCBDEF				; DEFINE UCB

                                     0000    49 	$XMDEF				; DEFINE DMC DRIVER SYMBOLS

                                     0000    50 	$VECDEF				; DEFINE CRB VECTOR

                                     0000    51 ;

                                     0000    52 ; LOCAL SYMBOL DEFINITIONS

                                     0000    53 ;

                                     0000    54 ; ARGUMENT LIST OFFSETS FOR QIO 

                                     0000    55 ;

                           00000000  0000    56 P1	= 0				; ARG #1 ETC.

                           00000004  0000    57 P2	= 4				;

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   2

V06                                                                                                                              (1)



                           00000008  0000    58 P3	= 8				;

                                     0000    59 ;

                                     0000    60 ; DMC DEFINITIONS AFTER END OF STANDARD UCB

                                     0000    61 ;

                                     0000    62 	$DEFINI

                           00000074  0000    63 	.BLKB	UCB$C_LENGTH

                                     0074    64 $DEF	UCB$Q_XM_ATTN			; ATTENTION MESSAGE LIST

                           0000007C  0074    65  			.BLKQ	1 

                                     007C    66 $DEF	UCB$Q_XM_RCVS			; WAITING RECEIVE I/O PACKET LIST

                           00000084  007C    67  			.BLKQ	1 

                                     0084    68 $DEF	UCB$Q_XM_FREE			; MEMORY BUFFER FREE LIST

                           0000008C  0084    69 			.BLKQ	1 

                                     008C    70 $DEF	UCB$Q_XM_CURCV1			; RECEIVE CONTROL BLOCK 1

                           00000094  008C    71  			.BLKQ	1 

                                     0094    72 $DEF	UCB$Q_XM_CURCV2			; RECEIVE CONTROL BLCOK 2

                           0000009C  0094    73  			.BLKQ	1 

                                     009C    74 $DEF	UCB$L_XM_ERRFKB			; FORK BLOCK FOR ERROR SIGNAL

                           000000A4  009C    75 			.BLKQ	1

                                     00A4    76 $DEF	UCB$W_XM_QUOTA			; QUOTA TAKEN FROM STARTING PROCESS

                           000000A6  00A4    77  			.BLKW	1 

                           000000A7  00A6    78 			.BLKB	1

                                     00A7    79 $DEF	UCB$B_XM_EIPL			; ERROR FORK IPL

                           000000A8  00A7    80 			.BLKB	1

                           000000AC  00A8    81 			.BLKL	1

                                     00AC    82 $DEF	UCB$L_XM_LSTPRT			; LAST PORT VALUE

                           000000B0  00AC    83 			.BLKL	1

                                     00B0    84 $DEF	UCB$L_XM_LSTCSR			; LAST CSR VALUE

                           000000B4  00B0    85 			.BLKL	1

                                     00B4    86 $DEF	UCB$L_XM_BASAD			; ADDRESS OF MEMORY BASE TABLE

                           000000B8  00B4    87 			.BLKL	1

                                     00B8    88 $DEF	UCB$L_XM_AST			; ATTENTION AST LIST

                           000000BC  00B8    89 			.BLKL	1

                                     00BC    90 $DEF	UCB$W_XM_BASMP			; MAP REGISTER SET FOR BASE TABLE

                           000000BE  00BC    91 			.BLKW	1

                           000000C0  00BE    92 			.BLKW	1

                                     00C0    93 $DEF	UCB$L_XM_PID			; STARTER'S PID

                           000000C4  00C0    94 			.BLKL	1

                                     00C4    95 ;

                                     00C4    96 ; DMC-11 DEFINITIONS

                                     00C4    97 ;

                           00000000  00C4    98 .=0

                                     0000    99 	_VIELD	XM_RCV,0,<-		; DEFINITION FOR RCV CONTROL BLOCK

                                     0000   100 		<INUS,,M>,-		; BLOCK IN USE BUT IDLE

                                     0000   101 		<INPR,,M>,-		; HARDWARE RECEIVE IN PROGRESS

                                     0000   102 	>

                                     0000   103 ;

                                     0000   104 ; NOTE THAT THE BITS IN THE FIRST BYTE OF DEVSTS FOLLOW THE ICSR BITS

                                     0000   105 ;

                                     0000   106 	_VIELD	XM_DS,0,<-		; DEFINITION FOR DEVSTS

                                     0000   107 		<,2>,-			; RESERVED BIT

                                     0000   108 		<RQSTRCV,,M>,-		; REQUEST RECEIVE

                                     0000   109 		<RQSTXMT,,M>,-		; REQUEST XMIT START

                                     0000   110 		<,1>,-			; RESERVED

                                     0000   111 		<REQUEST,,M>,-		; REQUEST PORT

                                     0000   112 		<,2>,-			; RESERVED BITS

                                     0000   113 		<XMTPND,,M>,-		; TRANSMIT CONTROL I PENDING

                                     0000   114 		<XMTINP,,M>,-		; XMIT IN PROGRESS

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   3

V06                                                                                                                              (1)



                                     0000   115 		<INITED,,M>,-		; UNIT INITIALIZED

                                     0000   116 		<NOTIF,,M>,-		; MAILBOX NOTIFIED

                                     0000   117 	>

                                     0000   118 	_VIELD	XM_FC,0,<-		; INTERNAL FUNCTION CODES

                                     0000   119 		<WRITE,,M>,-		; TRANSMIT - REQ. ONLINE

                                     0000   120 		<START,,M>,-		; START PROTOCOL - REQ. OFFLINE

                                     0000   121 		<STOP,,M>,-		; STOP PROTOCOL - REQ. ONLINE

                                     0000   122 		<CHANGE,,M>,-		; CHANGE MODE - REQ. OFFLINE

                                     0000   123 	>

                                     0000   124 $DEF	XM_I_CSR	.BLKW	1	; INPUT CSR

                                     0002   125 	_VIELD	XM_I,0,<-		; BIT DEFINITIONS

                                     0002   126 		<TYPE,2,M>,-		; REQUEST TYPE

                                     0002   127 		<RCV,,M>,-		; RECEIVE OR XMIT FLAG

                                     0002   128 		<,2>,-			; RESERVED BITS

                                     0002   129 		<RQSTI,,M>,-		; REQUEST INTERRUPT

                                     0002   130 		<INTEN,,M>,-		; INTERRUPT ENABLED

                                     0002   131 		<READY,,M>,-		; PORT AVAILABLE

                                     0002   132 		<,3>,-			; MAINT BITS

                                     0002   133 		<LOOPB,,M>,-		; LOOP BACK

                                     0002   134 		<,2>,-			; MAINT BITS

                                     0002   135 		<MASTCLR,,M>,-		; MASTER CLEAR

                                     0002   136 		<RUN,,M>,-		; RUN

                                     0002   137 	>

                                     0002   138 $DEF	XM_O_CSR	.BLKW	1	; OUTPUT CSR

                                     0004   139 	_VIELD	XM_O,0,<-		; BIT DEFINITIONS

                                     0004   140 		<TYPE,2,M>,-		; INTERRUPT TYPE

                                     0004   141 		<RCV,,M>,-		; RECEIVE OR XMIT

                                     0004   142 		<,3>,-			; RESERVED BITS

                                     0004   143 		<INTEN,,M>,-		; INTERRUPT ENABLE

                                     0004   144 		<READY,,M>,-		; READY

                                     0004   145 	>

                                     0004   146 $DEF	XM_PORT		.BLKW	1	; DEFINE PORT OFFSET

                                     0006   147 	_VIELD	XM_E,0,<-		; ERROR WORD DEFINITIONS

                                     0006   148 		<DCHK,,M>,-		; DATA CHECK

                                     0006   149 		<TIMO,,M>,-		; TIMEOUT

                                     0006   150 		<ORUN,,M>,-		; DATA OVERRUN

                                     0006   151 		<MOP,,M>,-		; ENTER MOP MODE RECEIVED

                                     0006   152 		<LOST,,M>,-		; LOST DATA

                                     0006   153 		<TRNER,,M>,-		; TRANSFER ERROR ON UBA

                                     0006   154 		<LINEDWN,,M>,-		; LINE DOWN

                                     0006   155 		<START,,M>,-		; START RECEIVED

                                     0006   156 		<NONEXMEM,,M>,-		; NON EXMEM

                                     0006   157 		<PROCERR,,M>,-		; PROCEEDURE ERROR

                                     0006   158 		<POWER,,M>,-		; SOFTWARE POWER FIALURE

                                     0006   159 		<TIMEOUT,,M>,-		; SOFTWARE TIMEOUT 

                                     0006   160 		>

                                     0006   161 ;

                                     0006   162 ; DEFINITION OF THE XM DRIVER RECEIVE MESSAGE BLOCK

                                     0006   163 ;

                           00000000  0006   164 	.=0

                           00000008  0000   165 MSG_LINK:	.BLKL	2

                           0000000A  0008   166 MSG_BLKSIZE:	.BLKW	1

                           0000000B  000A   167 MSG_BLKTYPE:	.BLKB	1

                           0000000C  000B   168 MSG_FIPL:	.BLKB	1

                                     000C   169 MSG_UBVA:

                           00000010  000C   170 MSG_FPC:	.BLKL	1

                                     0010   171 MSG_MAP1:

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   4

V06                                                                                                                              (1)



                           00000014  0010   172 MSG_PORT:	.BLKL	1

                                     0014   173 MSG_MAP2:

                           00000018  0014   174 MSG_CSR:	.BLKL	1

                                     0018   175 MSG_DATA:	

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   5

V06             XMDRIVER LOCAL STORAGE                                                                                           (2)



                                     0018   177 	.SBTTL	XMDRIVER LOCAL STORAGE

                                     0018   178 ;

                                     0018   179 ; DRIVER PROLOGUE TABLE

                                     0018   180 ;

                                     0018   181 	DPTAB	-			;

                                     0018   182 		END=XM_END,-		; END OF DRIVER

                                     0018   183 		ADAPTER=UBA,-		; ADAPTER TYPE

                                     0018   184 		UCBSIZE=<^X0C4>,-	; SIZE OF UCB

                                     0018   185 		NAME=XMDRIVER		; DRIVER NAME

                                     001F   186 	DPT_STORE INIT			; START OF CONTROLLER INIT

                                     001F   187  

                                     001F   188 	DPT_STORE UCB,UCB$B_FIPL,B,8	; FORK IPL

                                     0023   189 	DPT_STORE UCB,UCB$B_DIPL,B,22	; DEVICE IPL

                                     0027   190 	DPT_STORE UCB,UCB$L_DEVCHAR,L,<-; DEVICE CHARACTERISTICS

                                     0027   191 		DEV$M_NET!DEV$M_IDV!DEV$M_ODV>;

                                     002E   192 	DPT_STORE UCB,UCB$B_DEVCLASS,B,DC$_SCOM; DEVICE CLASS

                                     0032   193 	DPT_STORE UCB,UCB$W_DEVBUFSIZ,W,256; DEFAULT BUFFER SIZE

                                     0037   194  

                                     0037   195 	DPT_STORE REINIT

                                     0037   196  

                                     0037   197 	DPT_STORE DDB,DDB$L_DDT,D,XM$DDT; DDT ADDRESS

                                     003C   198 	DPT_STORE CRB,CRB$L_INTD+VEC$L_INITIAL,D,CONTROL_INIT; CONTROLLER INIT ADDRESS

                                     0041   199 	DPT_STORE CRB,CRB$L_INTD+4,D,PORT_INTR; PORT INTERRUPT

                                     0046   200 	DPT_STORE CRB,CRB$L_INTD+VEC$L_UNITINIT,D,UNIT_INIT; UNIT INIT

                                     004B   201 	DPT_STORE CRB,CRB$L_INTD+VEC$L_START,D,ACP_RECEIVE; ACP RECEIVE VECTOR

                                     0050   202 	DPT_STORE CRB,CRB$L_INTD2+4,D,CONTROL_INTR; CONTROL INTERRUPT

                                     0055   203 	DPT_STORE UCB,UCB$L_FPC,D,TIMEOUT ; SET UP TIMEOUT VECTOR

                                     005A   204 	DPT_STORE END

                                     0018   205 	

                                 00000000   206 	.PSECT	$$$115_DRIVER,LONG

                                     0000   207 ;

                                     0000   208 ; LOCAL STORAGE

                                     0000   209 ;

                                     0000   210 ; DRIVER DDT

                                     0000   211 ;

                                     0000   212 	DDTAB	XM,-			; DECLARE XM DRIVER DDT

                                     0000   213 		STARTIO,-		; START I/O

                                     0000   214 		0,-			; UNSOLICITED INTERRUPT

                                     0000   215 		FUNCTABLE,-		; FUNCTION DECESION TABLE

                                     0000   216 		EXT_CANCELIO,-		; CANCEL I/O, EXTERNAL

                                     0000   217 		REGDUMP,-		; REGISTER DUMP ROUTINE

                                     0000   218 		<32+36>,-		; DIAG BUFFER SIZE

                                     0000   219 		0			; ERROR LOG ENTRY SIZE

                                     0018   220 ;

                                     0018   221 ; FUNCTION TABLE

                                     0018   222 ;

                                     0018   223 FUNCTABLE:				;

                                     0018   224 	FUNCTAB	,-			; LEGAL FUNCTIONS

                                     0018   225 	<WRITELBLK,READLBLK,WRITEPBLK,READPBLK,SETMODE,SETCHAR,READVBLK,WRITEVBLK>

                                     0020   226 	FUNCTAB	,<READLBLK,READPBLK,SETMODE,SETCHAR,READVBLK>

                                     0028   227 	FUNCTAB	XMITFDT,<WRITELBLK,WRITEPBLK>;

                                     0034   228 	FUNCTAB	RCVFDT,<READLBLK,READPBLK,READVBLK>

                                     0040   229 	FUNCTAB	SETMODEFDT,<SETMODE,SETCHAR>;

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   6

V06             CONTROL_INIT - INITIALIZE DMC-11 DEVICE                                                                          (3)



                                     004C   231 	.SBTTL	CONTROL_INIT - INITIALIZE DMC-11 DEVICE

                                     004C   232 ;++

                                     004C   233 ; CONTROL_INIT - INITIALIZE DMC-11 DEVICE

                                     004C   234 ;

                                     004C   235 ; FUNCTIONAL DESCRIPTION:

                                     004C   236 ;

                                     004C   237 ; THIS ROUTINE IS ENTERED AT SYSTEM STARTUP TO INITIALIZE A DMC-11.

                                     004C   238 ; THERE IS NO ACTION.

                                     004C   239 ;

                                     004C   240 ; INPUTS:

                                     004C   241 ;

                                     004C   242 ;	R4 = ADDRESS OF THE DEVICE CSR

                                     004C   243 ;	R5 = ADDRESS OF THE DEVICES IDB

                                     004C   244 ;	R9 = ADDRESS OF THE DEVICE CRB

                                     004C   245 ;

                                     004C   246 ; OUTPUTS:

                                     004C   247 ;

                                     004C   248 ;	R4,R5,R9 ARE PRESERVED

                                     004C   249 ;--

                                     004C   250 CONTROL_INIT:				; INITIALIZE THE DMC-11 

                                     004C   251 ;

                                     004C   252 ; THIS INSTRUCTION IS TEMPORARY UNTIL BUFFERED DATA PATH/DMC11 ARE STABILIZED

                                     004C   253 ;

            01            1F     78  004C   254 	ASHL	#VEC$V_PATHLOCK+24,#1,CRB$L_INTD+VEC$W_MAPREG(R9); SET UNBUFFERED

                       24 A9         004F       

                                 05  0051   255 	RSB				; RETURN TO INIT PATH

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   7

V06             UNIT_INIT - INITIALIZE THE DMC-11 UNIT                                                                           (4)



                                     0052   257 	.SBTTL	UNIT_INIT - INITIALIZE THE DMC-11 UNIT

                                     0052   258 ;++

                                     0052   259 ; UNIT_INIT - INITIALIZE THE DMC-11 UNIT

                                     0052   260 ;

                                     0052   261 ; FUNCTIONAL DESCRIPTION:

                                     0052   262 ;

                                     0052   263 ; THIS ROUTINE IS USED AT SYSTEM STARTUP AND POWERFAIL TO INITIALIZE

                                     0052   264 ; A SINGLE DMC-11 UNIT AND ITS UCB.

                                     0052   265 ; IF THE POWER HAS NOT FAILED, THEN THERE IS NO ACTION.

                                     0052   266 ; ON POWERFAIL THE DEVICE IS FORCED TO TIMEOUT.

                                     0052   267 ;

                                     0052   268 ; INPUTS:

                                     0052   269 ;

                                     0052   270 ;	R5 = UCB ADDRESS

                                     0052   271 ;

                                     0052   272 ; OUTPUTS:

                                     0052   273 ;

                                     0052   274 ;	R5 IS PRESERVED.

                                     0052   275 ;--

                                     0052   276 UNIT_INIT:				; INITIALIZE A DMC-11 UNIT

         58 A5            10     A8  0052   277 	BISW	#UCB$M_ONLINE,UCB$W_STS(R5); ASSUME ONLINE

         58 A5            05     E1  0056   278 	BBC	#UCB$V_POWER,UCB$W_STS(R5),10$; BR IF NOT POWERFAIL

                          11         005A       

         3C A5            0B     E1  005B   279 	BBC	#XM$V_STS_ACTIVE,UCB$L_DEVDEPEND(R5),10$; IF NOT ACTIVE IN DRIVER

                          0C         005F       

         5C A5   00000000'GF     D0  0060   280 	MOVL	G^EXE$GL_ABSTIM,UCB$L_DUETIM(R5); FORCE TIMEOUT

         58 A5            03     A8  0068   281 	BISW	#UCB$M_INT!UCB$M_TIM,UCB$W_STS(R5);

                                 05  006C   282 10$:	RSB				; DONE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   8

V06             XMITFDT - TRANSMIT I/O OPERATION FDT ROUTINE                                                                     (5)



                                     006D   284 	.SBTTL XMITFDT - TRANSMIT I/O OPERATION FDT ROUTINE

                                     006D   285 ;++

                                     006D   286 ; XMITFDT - TRANSMIT I/O OPERATION FDT ROUTINE

                                     006D   287 ;

                                     006D   288 ; FUNCTIONAL DESCRIPTION:

                                     006D   289 ;

                                     006D   290 ; THIS ROUTINE SETS UP THE INTERNAL FUNCTION CODE FOR TRANSMIT AND

                                     006D   291 ; TRANSFERS CONTROL TO THE EXEC DIRECT I/O WRITE FDT ROUTINE.

                                     006D   292 ;

                                     006D   293 ; INPUTS:

                                     006D   294 ;

                                     006D   295 ;	R3 = I/O PACKET ADDRESS

                                     006D   296 ;	R4 = CURRENT PCB ADDRESS

                                     006D   297 ;	R5 = UCB ADDRESS

                                     006D   298 ;	R6 = CCB ADDRESS

                                     006D   299 ;	R7 = FUNCTION CODE

                                     006D   300 ;

                                     006D   301 ; OUTPUTS:

                                     006D   302 ;

                                     006D   303 ;	R3,R4,R5,R6,R7 ARE PRESERVED

                                     006D   304 ;

                                     006D   305 ;--

                                     006D   306 XMITFDT:				; TRANSMIT FDT ROUTINE

            00            00     F0  006D   307 	INSV	#XM_FC_V_WRITE,#IRP$V_FCODE,#IRP$S_FCODE,IRP$W_FUNC(R3)

         20 A3            06         0070       

                 00000000'GF     17  0073   308 	JMP	G^EXE$WRITE		; CONTINUE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page   9

V06             RCVFDT - RECEIVE I/O OPERATION FDT ROUTINE                                                                       (6)



                                     0079   310 	.SBTTL	RCVFDT - RECEIVE I/O OPERATION FDT ROUTINE

                                     0079   311 ;++

                                     0079   312 ; RCVFDT - RECEIVE I/O OPERATION FDT ROUTINE

                                     0079   313 ;

                                     0079   314 ; FUNCTIONAL DESCRIPTION:

                                     0079   315 ;

                                     0079   316 ; THE SPECIFIED BUFFER IS CHECKED FOR ACCESSIBILITY. THE BUFFER ADDRESS AND COUNT

                                     0079   317 ; ARE SAVED IN THE PACKET. THEN IPL IS SET TO DEVICE FORK IPL AND IF A MESSAGE IS

                                     0079   318 ; AVAILABLE THE OPERATION IS COMPLETED. OTHERWISE THE PACKET IS QUEUED ONTO

                                     0079   319 ; THE WAITING RECEIVE LIST. THE MAILBOX NOTIFIED BIT IS CLEARED.

                                     0079   320 ;

                                     0079   321 ; FOR FUNCTIONS SPECIFING IO$M_NOW, THE I/O IS COMPLETED WITH STATUS OF

                                     0079   322 ; SS$_ENDOFILE IF NO MESSAGE IS AVAILABLE WHEN THE TEST IS MADE.

                                     0079   323 ;

                                     0079   324 ; FOR FUNCTIONS SPECIFING IO$M_DSABLMBX THE MAILBOX IS DISABLED.

                                     0079   325 ;

                                     0079   326 ; INPUTS:

                                     0079   327 ;

                                     0079   328 ;	R3 = I/O PACKET ADDRESS

                                     0079   329 ;	R4 = PCB ADDRESS

                                     0079   330 ;	R5 = UCB ADDRESS

                                     0079   331 ;	R6 = CCB ADDRESS

                                     0079   332 ;	R7 = FUNCTION CODE

                                     0079   333 ;	AP = ADDRESS OF THE FIRST OPERATION SPECIFIC QIO PARAMETER

                                     0079   334 ;

                                     0079   335 ; OUTPUTS:

                                     0079   336 ;

                                     0079   337 ;	R0 = THE STATUS OF THE RECEIVE QIO OPERATION

                                     0079   338 ;	R3 = I/O PACKET ADDRESS

                                     0079   339 ;	R4 = PCB ADDRESS

                                     0079   340 ;	R5 = UCB ADDRESS

                                     0079   341 ;	R6 = CCB ADDRESS

                                     0079   342 ;	R7 = FUNCTION CODE

                                     0079   343 ;	AP = ADDRESS OF THE FIRST OPERATION SPECIFIC PARAMETER

                                     0079   344 ;

                                     0079   345 ;--

                                     0079   346 RCVFDT:					; READ OPERATION FDT

                                     0079   347 ;

                                     0079   348 ; CHECK THE REQUEST PARAMS

                                     0079   349 ;

            50            6C     D0  0079   350 	MOVL	P1(AP),R0		; GET USER BUFFER ADDRESS

            51         04 AC     3C  007C   351 	MOVZWL	P2(AP),R1		; AND SIZE

                          49     13  0080   352 	BEQL	50$			; IF EQL THEN ERROR

         34 A3            50     D0  0082   353 	MOVL	R0,IRP$L_MEDIA(R3)	; SAVE USER VA FOR COMPLETION

                       30 A3     B4  0086   354 	CLRW	IRP$W_BOFF(R3)		; SET NO QUOTA TO HERE

                 00000000'GF     16  0089   355 	JSB	G^EXE$READCHK		; CHECK THE BUFFER

                                     008F   356 					; NO RETURN ON NO ACCESS

                                     008F   357 ;

                                     008F   358 ; CHECK FOR MESSAGE AVAILABLE AND RESET MAILBOX STATUS

                                     008F   359 ;

                                     008F   360 	SETIPL	UCB$B_FIPL(R5)		; RAISE IPL TO LOCK DATA BASE

         5A A5       0800 8F     AA  0093   361 	BICW	#XM_DS_M_NOTIF,UCB$W_DEVSTS(R5); CLEAR NOTIFIED STATUS

         20 A3            0A     E1  0099   362 	BBC	#IO$V_DSABLMBX,IRP$W_FUNC(R3),10$; BR IF NO DISABLE MAILBOX

                          04         009D       

         3C A5            10     AA  009E   363 	BICW	#XM$M_CHR_MBX,UCB$L_DEVDEPEND(R5); DISABLE MAILBOX

            52         74 B5     0F  00A2   364 10$:	REMQUE	@UCB$Q_XM_ATTN(R5),R2	; DEQUEUE A RECEIVED MESSAGE

                          05     1D  00A6   365 	BVS	15$			; IF V-SET THEN NONE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  10

V06             RCVFDT - RECEIVE I/O OPERATION FDT ROUTINE                                                                       (6)



                                     00A8   366 ;

                                     00A8   367 ; COMPLETE RECEIVE WITH AVAILABLE MESSAGE

                                     00A8   368 ;

                          06ED   30  00A8   369 	BSBW	FINISH_RCV_IO		; MATCH THE RECEIVE WITH THE MESSAGE

                          14     11  00AB   370 	BRB	30$			; RETURN TO CALLER

                                     00AD   371 ;

                                     00AD   372 ; QUEUE RECEIVE I/O FOR FUTURE MESSAGE ARIVIAL UNLESS IO$M_NOW SPECIFIED

                                     00AD   373 ;

         20 A3            06     E1  00AD   374 15$:	BBC	#IO$V_NOW,IRP$W_FUNC(R3),20$; BR IF READ NOW

                          0A         00B1       

            50       0000'8F     3C  00B2   375 	MOVZWL	#SS$_ENDOFFILE,R0	; SET NO MESSAGE ERROR STATUS

                          071D   30  00B7   376 	BSBW	RCV_IO_DONE		; COMPLETE THE I/O

                          05     11  00BA   377 	BRB	30$			; CONTINUE

       0080 D5            63     0E  00BC   378 20$:	INSQUE	(R3),@UCB$Q_XM_RCVS+4(R5); PUT PACKET ON WAITING LIST

            50         00'8F     9A  00C1   379 30$:	MOVZBL	#SS$_NORMAL,R0		; SET QIO STATUS

                 00000000'GF     17  00C5   380 	JMP	G^EXE$QIORETURN		; RETURN TO CALLER

                                     00CB   381 ;

                                     00CB   382 ; ZERO LENGTH BUFFER

                                     00CB   383 ;

            50       0000'8F     3C  00CB   384 50$:	MOVZWL	#SS$_BADPARAM,R0	;

                          51     D4  00D0   385 	CLRL	R1			;

                 00000000'GF     17  00D2   386 	JMP	G^EXE$ABORTIO		;

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  11

V06             SETMODEFDT - SET MODE I/O OPERATION FDT DISPATC                                                                  (7)



                                     00D8   388 	.SBTTL	SETMODEFDT - SET MODE I/O OPERATION FDT DISPATCH ROUTINE

                                     00D8   389 ;++

                                     00D8   390 ; SETMODEFDT - SET MODE FDT PROCESSING

                                     00D8   391 ;

                                     00D8   392 ; FUNCTIONAL DESCRIPTION:

                                     00D8   393 ;

                                     00D8   394 ; THIS IS THE FDT ROUTINE FOR SETMODE FUNCTIONS. THERE ARE THREE FUNCTIONS BASED ON

                                     00D8   395 ; SUBFUNCTION MODIFIER BIT.

                                     00D8   396 ;

                                     00D8   397 ; 1)	CHANGE MODE -- NO MODIFIER BIT.

                                     00D8   398 ;	THIS FUNCTION IS DONE IN THE STARTIO ROUTINE. CONTROL IS PASSED TO

                                     00D8   399 ;	EXE$SETMODE TO VALIDATE THE NEW MODE BUFFER AND QUEUE THE PACKET.

                                     00D8   400 ;

                                     00D8   401 ; 2)	INITIALIZE THE UNIT -- IO$M_STARTUP SET.

                                     00D8   402 ;	THIS FUNCTION IS DONE PARTIALLY HERE AND THE REMAINDER IS DONE IN STARTIO.

                                     00D8   403 ;	THE ACTION HERE IS TO PICK UP THE USER BUFFERED I/O QUOTA AND ALLOCATE

                                     00D8   404 ;	THE BASE TABLE. THE BASE TABLE ADDRESS IS SAVED IN IRP$L_SVAPTE. THE QUOTA

                                     00D8   405 ;	TAKEN FROM THE USER IS IN IRP$W_BOFF. THIS VALUE WILL BE THE IOSB+2 VALUE

                                     00D8   406 ;	AT I/O DONE. THIS FUNCTION IS COMPLETE WHEN THE BASE TABLE HAS BEEN GIVEN

                                     00D8   407 ;	TO THE UNIT. THE MAILBOX IS ENABLED AND A RECEIVE IS STARTED.

                                     00D8   408 ;

                                     00D8   409 ; 3)	SHUTDOWN UNIT -- IO$M_SHUTDOWN SET.

                                     00D8   410 ;	THIS FUNCTION SHUTS DOWN THE UNIT AND OPTIONALLY RESETS THE MODE.

                                     00D8   411 ;	A CANCEL I/O IS PREFORMED, ALL OUTSTANDING I/O IS COMPLETED, THE BASE 

                                     00D8   412 ;	TABLE AND MESSAGE BLOCKS ARE ALL RETURNED AND THE UNIT IS LEFT IN AN IDLE

                                     00D8   413 ;	STATE. THIS FUNCTION CANNOT BE DONE HERE AND THE FDT PROCESSING IS

                                     00D8   414 ;	THAT OF ALL SETMODE OPERATIONS.

                                     00D8   415 ;

                                     00D8   416 ; 4)	REQUEST ATTENTION AST -- IO$M_ATTNAST

                                     00D8   417 ;	THIS FUNCTION SETS UP A AST TO BE DELIVERED ON ONE OF THE FOLLOWING

                                     00D8   418 ;	CONDITIONS:

                                     00D8   419 ;	

                                     00D8   420 ;	FATAL ERROR THAT CAUSED SHUTDOWN.

                                     00D8   421 ;	MESSAGE AVAILABLE TO BE RECEIVED.

                                     00D8   422 ;

                                     00D8   423 ;

                                     00D8   424 ; INPUTS:

                                     00D8   425 ;

                                     00D8   426 ;	R3 = I/O PACKET ADDESS

                                     00D8   427 ;	R4 = PCB ADDRESS

                                     00D8   428 ;	R5 = UCB ADDRESS

                                     00D8   429 ;	R6 = CCB ADDRESS

                                     00D8   430 ;	R7 = FUNCTION CODE

                                     00D8   431 ;	AP = ADDRESS OF THE FIRST QIO PARAMETER

                                     00D8   432 ;

                                     00D8   433 ; OUTPUTS:

                                     00D8   434 ;

                                     00D8   435 ;	R3 = I/O PACKET ADDRESS

                                     00D8   436 ;	R4 = PCB ADDRESS

                                     00D8   437 ;	R5 = UCB ADDRESS

                                     00D8   438 ;

                                     00D8   439 ;--

                                     00D8   440 SETMODEFDT:				; SET MODE FDT PROCESSING

                       2C A3     D4  00D8   441 	CLRL	IRP$L_SVAPTE(R3)	; SET NO BUFFERED PACKET

            57         20 A3     B0  00DB   442 	MOVW	IRP$W_FUNC(R3),R7	; GET ENTIRE FUNCTION CODE

            57            08     E1  00DF   443 	BBC	#IO$V_ATTNAST,R7,20$	; BR IF NOT AST REQUEST

                          35         00E2       

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  12

V06             SETMODEFDT - SET MODE I/O OPERATION FDT DISPATC                                                                  (7)



                                     00E3   444 ;

                                     00E3   445 ; ATTENTION AST REQUEST

                                     00E3   446 ;

            57       00B8 C5     9E  00E3   447 	MOVAB	UCB$L_XM_AST(R5),R7	; ADDRESS CONTROL BLOCK LIST

                 00000000'GF     16  00E8   448 	JSB	G^COM$SETATTNAST	; SET UP ATTENTION AST

                                     00EE   449 	DSBINT	UCB$B_FIPL(R5)		; CHECK FOR MESSAGES AVAILABLE

         5A A5            0A     E1  00F5   450 	BBC	#XM_DS_V_INITED,UCB$W_DEVSTS(R5),10$; BR IF DEVICE NOT INITED

                          14         00F9       

            51         74 A5     9E  00FA   451 	MOVAB	UCB$Q_XM_ATTN(R5),R1	; CHECK FOR EMPTY LIST

         74 A5            51     D1  00FE   452 	CMPL	R1,UCB$Q_XM_ATTN(R5)	; EMPTY LIST?

                          0A     13  0102   453 	BEQL	10$			; IF EQL THEN YES

                          53     DD  0104   454 	PUSHL	R3			; SAVE PACKET

                          54     D4  0106   455 	CLRL	R4			; SET NO MAILBOX MESSAGE

                          0763   30  0108   456 	BSBW	POKE_USER		; DELIVER THE AST

                          53   8ED0  010B   457 	POPL	R3

            51         3C A5     D0  010E   458 10$:	MOVL	UCB$L_DEVDEPEND(R5),R1	; GET STATUS 

                 00000000'GF     17  0112   459 	JMP	G^EXE$FINISHIO		; COMPLETE THE I/O

                                     0118   460 ;

                                     0118   461 ; SET MODE REQUEST

                                     0118   462 ;

                       34 A3     7C  0118   463 20$:	CLRQ	IRP$L_MEDIA(R3)		; RESET MODE DATA AREA

                          53     DD  011B   464 	PUSHL	R3			; SAVE PACKET ADDRESS

            52            6C     D0  011D   465 	MOVL	P1(AP),R2		; ADDRESS BUFFER

                          13     13  0120   466 	BEQL	30$			; BR IF NOT SPECIFIED

            50       0000'8F     3C  0122   467 	MOVZWL	#SS$_ACCVIO,R0		; ASSUME NO READ 

                                     0127   468 	IFNORD	#8,(R2),45$		; IF NO READ THEN ERROR

         34 A3            62     7D  012D   469 	MOVQ	(R2),IRP$L_MEDIA(R3)	; SAVE DATA IN PACKET

         34 A3            01     90  0131   470 	MOVB	#1,IRP$L_MEDIA(R3)	; MARK IT VALID

            57            06     E0  0135   471 30$:	BBS	#IO$V_STARTUP,R7,50$	; BR IF STARTUP FUNCTION

                          13         0138       

                                     0139   472 ;

                                     0139   473 ; CHANGE MODE OR SHUTDOWN

                                     0139   474 ;

         20 A3            03     9B  0139   475 	MOVZBW	#XM_FC_V_CHANGE,IRP$W_FUNC(R3); ASSUME MODE CHANGE

            57            07     E1  013D   476 	BBC	#IO$V_SHUTDOWN,R7,40$	; BR IF NOT SHUTDOWN OF UNIT

                          04         0140       

         20 A3            02     9B  0141   477 	MOVZBW	#XM_FC_V_STOP,IRP$W_FUNC(R3); SET INTERNAL FUNCTION CODE

                          53   8ED0  0145   478 40$:	POPL	R3			;

                          62     11  0148   479 	BRB	90$			; ENTER DRIVER

                          66     11  014A   480 45$:	BRB	100$			; VECTOR

                                     014C   481 ;

                                     014C   482 ; START DEVICE

                                     014C   483 ;

         20 A3            01     9B  014C   484 50$:	MOVZBW	#XM_FC_V_START,IRP$W_FUNC(R3); INSERT INTERNAL FUNCTION CODE

            51         08 AC     9A  0150   485 	MOVZBL	P3(AP),R1		; GET NUMBER OF MESSAGES TO ALLOCATE

                          52     D5  0154   486 	TSTL	R2			; ANY SPECIFIED BUFFER?

                          04     12  0156   487 	BNEQ	55$			; IF NEQ THEN NO

            52         38 A5     9E  0158   488 	MOVAB	UCB$B_DEVCLASS(R5),R2	; ADDRESS UCB BLOCK

            52         02 A2     3C  015C   489 55$:	MOVZWL	2(R2),R2		; GET THE MESSAGE SIZE

            50       0000'8F     3C  0160   490 	MOVZWL	#SS$_BADPARAM,R0	; ASSUME BAD PARAMETER

            51            52     C4  0165   491 	MULL	R2,R1			; GET NEEDED QUOTA

                          48     13  0168   492 	BEQL	100$			; IF EQL THEN SOMETHING WRONG

            51       0100 8F     A0  016A   493 	ADDW	#256,R1			; ADD IN BASE TABLE SIZE

            57            51     3C  016F   494 	MOVZWL	R1,R7			; COPY QUOTA TAKEN

            57            51     D1  0172   495 	CMPL	R1,R7			; OVERFLOW?

                          3B     12  0175   496 	BNEQ	100$			; IF NEQ THEN ERROR

                 00000000'GF     16  0177   497 	JSB	G^EXE$BUFQUOPRC		; CHECK QUOTA

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  13

V06             SETMODEFDT - SET MODE I/O OPERATION FDT DISPATC                                                                  (7)



            32            50     E9  017D   498 	BLBC	R0,100$			; BR IF ERROR

            51       0100 8F     3C  0180   499 	MOVZWL	#256,R1			; ALLOCATE THE BASE TABLE

                 00000000'GF     16  0185   500 	JSB	G^EXE$ALLOCBUF		; ALLOCATE THE MEMORY

                                     018B   501 					; NO RETURN IS ERROR

                          53   8ED0  018B   502 	POPL	R3			; BRING BACK PACKET ADDRESS

         30 A3            57     B0  018E   503 	MOVW	R7,IRP$W_BOFF(R3)	; SAVE AS QUOTA FOR THIS I/O

         42 A4            57     A2  0192   504 	SUBW	R7,PCB$W_BYTCNT(R4)	; ADJUST QUOTA

         2C A3            52     D0  0196   505 	MOVL	R2,IRP$L_SVAPTE(R3)	; SAVE BASE TABLE ADDRESS

         08 A2            51     D0  019A   506 	MOVL	R1,8(R2)		; SET UP THE BLOCK

                          38     BB  019E   507 	PUSHR	#^M<R3,R4,R5>		; SAVE REGISTERS

         0A A2            00     2C  01A0   508 	MOVC5	#0,10(R2),#0,#256-10,10(R2); ZERO BLOCK

       00F6 8F            00         01A4       

                       0A A2         01A8       

                          38     BA  01AA   509 	POPR	#^M<R3,R4,R5>		; RESTORE REGS

                 00000000'GF     17  01AC   510 90$:	JMP	G^EXE$QIODRVPKT		; GIVE PACKET TO DRIVER

                                     01B2   511 ;

                                     01B2   512 ; ERROR

                                     01B2   513 ;

                          53   8ED0  01B2   514 100$:	POPL	R3			; RESTORE PACKET

                 00000000'GF     17  01B5   515 	JMP	G^EXE$ABORTIO		; ABORT THE I/O

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  14

V06             STARTIO - START XMIT OR SETMODE I/O OPERATION                                                                    (8)



                                     01BB   517 	.SBTTL	STARTIO - START XMIT OR SETMODE I/O OPERATION

                                     01BB   518 ;++

                                     01BB   519 ; STARTIO - START XMIT OR SETMODE OPERATION

                                     01BB   520 ;

                                     01BB   521 ; FUNCTIONAL DESCRIPTION:

                                     01BB   522 ;

                                     01BB   523 ; THIS ROUTINE IS ENTERED WHEN THE UNIT IS IDLE AND THERE IS A PACKET AVAILABLE

                                     01BB   524 ; TO PROCESS.

                                     01BB   525 ;

                                     01BB   526 ; XMIT FUNCTIONS --

                                     01BB   527 ;

                                     01BB   528 ;	THE ACTION IS TO SET UP THE UBA MAP AND REQUEST THE

                                     01BB   529 ;	THE CONTROL IN INTERRUPT. THE UNIT MUST BE IN A RUN STATE.

                                     01BB   530 ;

                                     01BB   531 ; SETMODE FUNCTIONS --

                                     01BB   532 ;

                                     01BB   533 ;	FOR ALL FUNCTIONS A CHANGE IN THE CHARACTERISTICS IS DONE.

                                     01BB   534 ;

                                     01BB   535 ;	FOR STARTUP, THE ACTION IS TO REQUEST AND SET UP THE UBA

                                     01BB   536 ;	MAP FOR THE BASE TABLE AND RECEIVES. THIS DATA IS SAVED

                                     01BB   537 ;	AFTER ALLOCATION IN THE UCB. AFTER THIS A BASEIN IS REQUESTED AND

                                     01BB   538 ;	WHEN IT COMPLETES, THE I/O IS COMPETED.

                                     01BB   539 ;

                                     01BB   540 ;	FOR SHUTDOWN, THE OPERATION IS TO CREATE A DMC-11 PROCEEDURE ERROR

                                     01BB   541 ;	AND AWAIT THE FATAL ERROR CONTROL OUT INTERRUPT. WHEN THAT OCCURS

                                     01BB   542 ;	THE UNIT IS SHUTDOWN.

                                     01BB   543 ;

                                     01BB   544 ; INPUTS:

                                     01BB   545 ;

                                     01BB   546 ;	R3 = PACKET ADDRESS

                                     01BB   547 ;	R5 = UCB ADDRESS

                                     01BB   548 ;

                                     01BB   549 ; OUTPUTS:

                                     01BB   550 ;

                                     01BB   551 ;	NONE

                                     01BB   552 ;--

                                     01BB   553 STARTIO:				; START SETMODE OR XMIT OPERATION

            51         3C A5     D0  01BB   554 	MOVL	UCB$L_DEVDEPEND(R5),R1	; GET STATUS AND CHARACTERISTICS

                          52     D4  01BF   555 	CLRL	R2			; ASSUME UNIT NEED NOT BE ACTIVE

            02         20 A3     E8  01C1   556 	BLBS	IRP$W_FUNC(R3),10$	; BR IF NOT EVEN - NOT ACTIVE

                          52     D6  01C5   557 	INCL	R2			; MUST BE ACTIVE

            01            0B     ED  01C7   558 10$:	CMPZV	#XM$V_STS_ACTIVE,#1,R1,R2; CHECK STATUS - ACTIVE?

            52            51         01CA       

                          12     12  01CC   559 	BNEQ	15$			; IF NEQ THEN DEVICE NOT READY

         20 A3         FC 8F     8B  01CE   560 	BICB3	#^X0FC,IRP$W_FUNC(R3),R1; GET XM FUNCTION ALONE

                          51         01D3       

                                     01D4   561 	CASE	R1,TYPE=B,<XMIT,START,SHUTDOWN,40$>

                                     01E0   562 ;

                                     01E0   563 ; BAD DEVICE STATUS FOR FUNCTION

                                     01E0   564 ;

            03         20 A3     91  01E0   565 15$:	CMPB	IRP$W_FUNC(R3),#XM_FC_V_CHANGE; CHANGE?

                          12     13  01E4   566 	BEQL	40$			; IF EQL THEN CONTINUE

                                     01E6   567 ;

                                     01E6   568 ; DEVICE NOT READY

                                     01E6   569 ;

                                     01E6   570 20$:

         6C A5       0000'8F     3C  01E6   571 	MOVZWL	#SS$_DEVACTIVE,UCB$W_BOFF(R5); SET DEVICE ACTIVE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  15

V06             STARTIO - START XMIT OR SETMODE I/O OPERATION                                                                    (8)



                          52     95  01EC   572 	TSTB	R2			; EXPECT ON OR OFF

                          11     13  01EE   573 	BEQL	50$			; IF EQL THEN ACTIVE AND SHOULD BE IDLE

         6C A5       0000'8F     3C  01F0   574 	MOVZWL	#SS$_DEVOFFLINE,UCB$W_BOFF(R5); SET DEVICE NOT ON LINE

                          09     11  01F6   575 	BRB	50$			; CONTINUE

                                     01F8   576 ;

                                     01F8   577 ; CHANGE MODE FUNCTION ALONE

                                     01F8   578 ;

                          0262   30  01F8   579 40$:	BSBW	CHANGE_MODE		; CHANGE THE STATUS IF NOT ACTIVE

         6C A5       0000'8F     3C  01FB   580 	MOVZWL	#SS$_NORMAL,UCB$W_BOFF(R5); SET STATUS

                          062E   31  0201   581 50$:	BRW	BUSY_IO_DONE		; COMPLETE THE REQUEST

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  16

V06             XMIT - START XMIT I/O                                                                                            (9)



                                     0204   583 	.SBTTL	XMIT - START XMIT I/O

                                     0204   584 ;++

                                     0204   585 ; XMIT - START XMIT I/O

                                     0204   586 ;

                                     0204   587 ; FUNCTIONAL DESCRIPTION:

                                     0204   588 ;

                                     0204   589 ; THIS ROUTINE IS ENTERED TO START A TRANSMIT I/O OPERATION. THE MAP REGISTERS

                                     0204   590 ; ARE ALLOCATED AND THE I/O IS STARTED.

                                     0204   591 ;

                                     0204   592 ; INPUTS:

                                     0204   593 ;

                                     0204   594 ;	R3 = I/O PACKET FOR TRANSMIT FUNCTION

                                     0204   595 ;	R5 = UCB ADDRESS

                                     0204   596 ;

                                     0204   597 ; OUTPUTS:

                                     0204   598 ;

                                     0204   599 ;	NONE

                                     0204   600 ;--

                                     0204   601 XMIT:					; START TRANSMIT I/O

            51         32 A3     3C  0204   602 	MOVZWL	IRP$W_BCNT(R3),R1	; GET BYTE COUNT

                          47     13  0208   603 	BEQL	15$			; IF EQ THEN ILLEGAL

         3A A5            51     B1  020A   604 	CMPW	R1,UCB$W_DEVBUFSIZ(R5)	; REQUEST SIZE IN RANGE?

                          49     1A  020E   605 	BGTRU	20$			; IF GTRU THEN ERROR

         20 A3            07     E1  0210   606 	BBC	#IO$V_ENABLMBX,IRP$W_FUNC(R3),10$; BR IF MAILBOX NOT TO BE ENABLED

                          05         0214       

         3C A5            04     E2  0215   607 	BBSS	#XM$V_CHR_MBX,UCB$L_DEVDEPEND(R5),10$; ENABLE MAILBOX

                          00         0219       

                 00000000'GF     16  021A   608 10$:	JSB	G^IOC$REQMAPREG		; REQUEST MAP REGISTER FOR OPERATION

                 00000000'GF     16  0220   609 	JSB	G^IOC$REQDATAP		; REQUEST  A DATA PATH

         34 A3         30 A3     D0  0226   610 	MOVL	IRP$W_BOFF(R3),IRP$L_MEDIA(R3); MOVE OFFSET AND SIZE

            52         20 A5     D0  022B   611 	MOVL	UCB$L_CRB(R5),R2	; ADDRESS CRB

                                 F0  022F   612 	INSV	CRB$L_INTD+VEC$W_MAPREG(R2),-

            09         24 A2         0230   613 		#9,#7,IRP$L_MEDIA(R3); INSERT MAP REGISTER IN ADDRESS

         34 A3            07         0233       

            02            07     EF  0236   614 	EXTZV	#7,#2,CRB$L_INTD+VEC$W_MAPREG(R2),R2; GET HIGH TWO BITS

            52         24 A2         0239       

            1E            52     F0  023C   615 	INSV	R2,#30,#2,IRP$L_MEDIA(R3); INSERT HIGH BITS

         34 A3            02         023F       

                 00000000'GF     16  0242   616 	JSB	G^IOC$LOADUBAMAP	; LOAD THE UBA FOR TRANSFER

         5A A5       0100 8F     A8  0248   617 	BISW	#XM_DS_M_XMTPND,UCB$W_DEVSTS(R5); SET XMIT START PENDING

                          03A8   31  024E   618 	BRW	RQSTXMITSTRT		; SET STATE TO REQUEST XMIT START

                                     0251   619 ;

                                     0251   620 ; 0 REQUEST SIZE

                                     0251   621 ;

         6C A5       0000'8F     3C  0251   622 15$:	MOVZWL	#SS$_BADPARAM,UCB$W_BOFF(R5); SET STATUS

                          06     11  0257   623 	BRB	25$			; CONTINUE

                                     0259   624 ;

                                     0259   625 ; REQUEST SIZE TOO BIG

                                     0259   626 ;

         6C A5       0000'8F     3C  0259   627 20$:	MOVZWL	#SS$_DATAOVERUN,UCB$W_BOFF(R5); SET ERROR STATUS

                          05D0   31  025F   628 25$:	BRW	BUSY_IO_DONE		; DO I/O DONE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  17

V06             START - START UNIT                                                                                              (10)



                                     0262   630 	.SBTTL	START - START UNIT 

                                     0262   631 ;++

                                     0262   632 ; START - START PROTOCOL

                                     0262   633 ;

                                     0262   634 ; FUNCTIONAL DESCRIPTION:

                                     0262   635 ;

                                     0262   636 ; THIS ROUTINE INITIATES PROTOCOL ON THE UNIT. THE ACTION IS TO ALLOCATE

                                     0262   637 ; THE MAP REGISTERS FOR THE BASE TABLE AND RECEIVES. ONCE THIS IS DONE,

                                     0262   638 ; THE UNIT IS MASTER CLEARED AND THE BASE TABLE AND MODE ARE SET UP.

                                     0262   639 ; THE THE FREE LIST IS FILLED AND THE FIRST RECEIVE STARTED.

                                     0262   640 ;

                                     0262   641 ; IF A FAILURE OCCURS THE UNIT SHUTDOWN SEQUENCE IS ENTERED.

                                     0262   642 ;

                                     0262   643 ; INPUTS:

                                     0262   644 ;

                                     0262   645 ;	R3 = I/O PACKET

                                     0262   646 ;	R5 = UCB ADDRESS

                                     0262   647 ;

                                     0262   648 ; IMPLICIT INPUTS:

                                     0262   649 ;

                                     0262   650 ;	IRP$L_MEDIA CONTAINS A COPY OF THE MODE BUFFER SPECIFIED BY THE USER.

                                     0262   651 ;	IRP$L_SVAPTE CONTAINS THE ADDRESS OF THE ALLOCATED BASE TABLE.

                                     0262   652 ;	IRP$W_BOFF CONTAINS THE QUOTA TAKEN FROM THE USER FOR THE UNIT.

                                     0262   653 ;

                                     0262   654 ; OUTPUTS:

                                     0262   655 ;

                                     0262   656 ;	THE REQUEST IS COMPETED.

                                     0262   657 ;--

                                     0262   658 START:					; START PROTOCOL OPERATION

                                     0262   659 ;

                                     0262   660 ; SET UP IDLE UCB

                                     0262   661 ;

            08            00     F0  0262   662 	INSV	#0,#8,#24,UCB$L_DEVDEPEND(R5); RESET STATUS AND ERROR SUMMRY

         3C A5            18         0265       

         7C A5         7C A5     9E  0268   663 	MOVAB	UCB$Q_XM_RCVS(R5),UCB$Q_XM_RCVS(R5); SET UP EMPTY RECEIVE LIST

       0080 C5         7C A5     9E  026D   664 	MOVAB	UCB$Q_XM_RCVS(R5),UCB$Q_XM_RCVS+4(R5);

       0084 C5       0084 C5     9E  0273   665 	MOVAB	UCB$Q_XM_FREE(R5),UCB$Q_XM_FREE(R5); SET UP EMPTY FREE LIST

       0088 C5       0084 C5     9E  027A   666 	MOVAB	UCB$Q_XM_FREE(R5),UCB$Q_XM_FREE+4(R5);

         74 A5         74 A5     9E  0281   667 	MOVAB	UCB$Q_XM_ATTN(R5),UCB$Q_XM_ATTN(R5); SET UP EMPTY ATTN LIST

         78 A5         74 A5     9E  0286   668 	MOVAB	UCB$Q_XM_ATTN(R5),UCB$Q_XM_ATTN+4(R5);

                     008C C5     7C  028B   669 	CLRQ	UCB$Q_XM_CURCV1(R5)	; RESET RECEIVE DATA

       008E C5            01     AE  028F   670 	MNEGW	#1,UCB$Q_XM_CURCV1+2(R5); SET NO MAP DATA

                     0094 C5     7C  0294   671 	CLRQ	UCB$Q_XM_CURCV2(R5)	; RESET RECEIVE DATA

       0096 C5            01     AE  0298   672 	MNEGW	#1,UCB$Q_XM_CURCV2+2(R5); SET NO MAP DATA

       00BC C5            01     AE  029D   673 	MNEGW	#1,UCB$W_XM_BASMP(R5)	; SET NO MAP REGS FOR BASE TABLE

       00A7 C5         0B A5     90  02A2   674 	MOVB	UCB$B_FIPL(R5),UCB$B_XM_EIPL(R5)

                          01B2   30  02A8   675 	BSBW	CHANGE_MODE		; INSERT NEW CHARACTERISTICS

         30 A3       0100 8F     A3  02AB   676 	SUBW3	#256,IRP$W_BOFF(R3),UCB$W_XM_QUOTA(R5); CALC AND SAVE FREE LIST QUOTA

                     00A4 C5         02B1       

       00C0 C5         0C A3     D0  02B4   677 	MOVL	IRP$L_PID(R3),UCB$L_XM_PID(R5); SAVE STARTER'S PID

                                     02BA   678 ;

                                     02BA   679 ; IF THE I/O PACKET QUOTA ADJUSTMENT IS ZEROED, THEN THE QUOTA IS CONSISTENT

                                     02BA   680 ;

                       30 A3     B4  02BA   681 	CLRW	IRP$W_BOFF(R3)		; SET NO QUOTA CHANGE ON THIS I/O

         5A A5       0400 8F     B0  02BD   682 	MOVW	#XM_DS_M_INITED,UCB$W_DEVSTS(R5); SET STATUS

            54         2C A3     D0  02C3   683 	MOVL	IRP$L_SVAPTE(R3),R4	; SAVE ADDRESS OF THE BASE TABLE

       00B4 C5            54     D0  02C7   684 	MOVL	R4,UCB$L_XM_BASAD(R5)	;

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  18

V06             START - START UNIT                                                                                              (10)



                          64     7C  02CC   685 	CLRQ	(R4)			; RESET HEADER

                       08 A4     D4  02CE   686 	CLRL	8(R4)			;

                       2C A3     D4  02D1   687 	CLRL	IRP$L_SVAPTE(R3)	; SET NO BLOCK FOR I/O POST

                                     02D4   688 ;

                                     02D4   689 ; ALLOCATE MAP REGISTERS FOR RECEIVE BLOCKS AND BASE TABLE.

                                     02D4   690 ;

         6E A5         3A A5     B0  02D4   691 	MOVW	UCB$W_DEVBUFSIZ(R5),UCB$W_BCNT(R5); SET UP TO ALLOCATE THE RECEIVE MAPS

         6C A5       01FF 8F     B0  02D9   692 	MOVW	#511,UCB$W_BOFF(R5)	; SET WORST CASE PAGE CROSS

            54         20 A5     D0  02DF   693 	MOVL	UCB$L_CRB(R5),R4	; ADDRESS UNIT CRB

         39 A5            03     E0  02E3   694 	BBS	#3,UCB$B_DEVTYPE(R5),10$; BR IF LOCAL DMC

                          05         02E7       

                                     02E8   695 ;

                                     02E8   696 ; FOR NON-LOCAL DMC-11'S, FORCE THE USE OF THE UN-BUFFERED UBA DATA PATH

                                     02E8   697 ;

            01            1F     78  02E8   698 	ASHL	#VEC$V_PATHLOCK+24,#1,CRB$L_INTD+VEC$W_MAPREG(R4); 

                       24 A4         02EB       

         10 A5         24 A4     D0  02ED   699 10$:	MOVL	CRB$L_INTD+VEC$W_MAPREG(R4),UCB$L_FR3(R5); SAVE MAP AND DP DATA

                 00000000'GF     16  02F2   700 	JSB	G^IOC$REQDATAPNW	; ASK FOR A DATA PATH

            49            50     E9  02F8   701 	BLBC	R0,30$			; BR ON FAILURE

       008C C5            52     90  02FB   702 	MOVB	R2,UCB$Q_XM_CURCV1(R5); SAVE DATAPATH NUMBER

                 00000000'GF     16  0300   703 	JSB	G^IOC$ALOUBAMAP		; REQUEST FIRST SET OF MAP REGISTERS

            3B            50     E9  0306   704 	BLBC	R0,30$			; BR ON FAILURE

       008E C5         24 A4     B0  0309   705 	MOVW	CRB$L_INTD+VEC$W_MAPREG(R4),UCB$Q_XM_CURCV1+2(R5); SAVE MAP REG DATA

                 00000000'GF     16  030F   706 	JSB	G^IOC$REQDATAPNW	; ASK FOR A DATA PATH

            2C            50     E9  0315   707 	BLBC	R0,30$			; BR ON FAILURE

       0094 C5            52     90  0318   708 	MOVB	R2,UCB$Q_XM_CURCV2(R5); SAVE DATAPATH NUMBER

                 00000000'GF     16  031D   709 	JSB	G^IOC$ALOUBAMAP		; REQUEST OTHER SET

            1E            50     E9  0323   710 	BLBC	R0,30$			;

       0096 C5         24 A4     B0  0326   711 	MOVW	CRB$L_INTD+VEC$W_MAPREG(R4),UCB$Q_XM_CURCV2+2(R5); SAVE MAP REG DATA

                                     032C   712 ;

                                     032C   713 ; MAP BASE TABLE

                                     032C   714 ;

       00B4 C5       FFFF'8F     AB  032C   715 	BICW3	#^C<VA$M_BYTE>,UCB$L_XM_BASAD(R5),UCB$W_BOFF(R5); GET PAGE OFFSET FOR BASE TA

                       6C A5         0333       

         6E A5       0100 8F     B0  0335   716 	MOVW	#256,UCB$W_BCNT(R5)	; SET SIZE

                 00000000'GF     16  033B   717 	JSB	G^IOC$ALOUBAMAP		; REQUEST MAP REGISTER FOR BASE TABLE

            08            50     E8  0341   718 	BLBS	R0,50$			; BR IF FAILED

         24 A4         10 A5     D0  0344   719 30$:	MOVL	UCB$L_FR3(R5),CRB$L_INTD+VEC$W_MAPREG(R4); RESET MAP AND DP DATA

                          05CA   31  0349   720 	BRW	SHUTDOWN		; CONTINUE - ERROR IN STARTUP

       00BC C5         24 A4     B0  034C   721 50$:	MOVW	CRB$L_INTD+VEC$W_MAPREG(R4),UCB$W_XM_BASMP(R5)

         27 A4         80 8F     90  0352   722 	MOVB	#VEC$M_PATHLOCK,CRB$L_INTD+VEC$B_DATAPATH(R4); SET LOCKED DP0

            00'           00'    EF  0357   723 	EXTZV	S^#VA$V_VPN,S^#VA$S_VPN,UCB$L_XM_BASAD(R5),R1; GET PTE ADDRESS FOR BASE TABLE

            51       00B4 C5         035A       

            50   00000000'GF     D0  035E   724 	MOVL	G^MMG$GL_SPTBASE,R0

         68 A5            6041   DE  0365   725 	MOVAL	(R0)[R1],UCB$L_SVAPTE(R5); PUT IT IN UCB

                 00000000'GF     16  036A   726 	JSB	G^IOC$LOADUBAMAP	; LOAD THE MAP FOR THE BASE TABLE

                       6E A5     B4  0370   727 	CLRW	UCB$W_BCNT(R5)		; SET UP FOR MAP

            09         24 A4     F0  0373   728 	INSV	CRB$L_INTD+VEC$W_MAPREG(R4),#9,#7,UCB$W_BOFF(R5);

         6C A5            07         0377       

            02            07     EF  037A   729 	EXTZV	#7,#2,CRB$L_INTD+VEC$W_MAPREG(R4),R0; GET HIGH TWO BITS

            50         24 A4         037D       

            1E            50     F0  0380   730 	INSV	R0,#30,#2,UCB$W_BOFF(R5); INSERT IN RESULT

         6C A5            02         0383       

         24 A4         10 A5     D0  0386   731 	MOVL	UCB$L_FR3(R5),CRB$L_INTD+VEC$W_MAPREG(R4); RESET MAP AND DP DATA

            54         1C B4     D0  038B   732 	MOVL	@CRB$L_INTD+VEC$L_IDB(R4),R4; GET THE CSR

            53         4C A5     D0  038F   733 	MOVL	UCB$L_IRP(R5),R3	; PICK UP PACKET ADDRESS

                                     0393   734 	DSBINT	UCB$B_DIPL(R5)		; LOCK OUT INTERRUPTS FROM DEVICE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  19

V06             START - START UNIT                                                                                              (10)



            64       4000 8F     B0  039A   735 	MOVW	#XM_I_M_MASTCLR,(R4)	; MASTER CLEAR THE UNIT

                          009C   30  039F   736 	BSBW	AWAIT_UNIT		; AWAIT THE UNIT

         3C A5            01     E1  03A2   737 	BBC	#XM$V_CHR_LOOPB,UCB$L_DEVDEPEND(R5),70$; BR IF NO LOOP BACK

                          08         03A6       

            64       0800 8F     A8  03A7   738 	BISW	#XM_I_M_LOOPB,(R4)	; SET LOOP BACK

                          008F   30  03AC   739 	BSBW	AWAIT_UNIT		; AWAIT THE UNIT

            50            23     B0  03AF   740 70$:	MOVW	#XM_I_M_RQSTI!3,R0	; REQUEST BASE IN

                          0083   30  03B2   741 	BSBW	SYNCH_UNIT		; AWAIT UNIT

            64       0080 8F     B3  03B5   742 	BITW	#XM_I_M_READY,(R4)	;READY?

                          76     13  03BA   743 	BEQL	100$			; IF EQL THEN NO

         04 A4         6C A5     B0  03BC   744 	MOVW	UCB$W_BOFF(R5),XM_PORT(R4); INSERT BASE TABLE VA

         06 A4         6E A5     B0  03C1   745 	MOVW	UCB$W_BCNT(R5),XM_PORT+2(R4);

            64            20     AA  03C6   746 	BICW	#XM_I_M_RQSTI,(R4)	; FREE PORT

                          73     10  03C9   747 	BSBB	AWAIT_UNIT		; AWAIT UNIT

            50            21     B0  03CB   748 	MOVW	#XM_I_M_RQSTI!1,R0	; REQUEST CONTROL I

                          68     10  03CE   749 	BSBB	SYNCH_UNIT		; AWAIT UNIT

            64       0080 8F     B3  03D0   750 	BITW	#XM_I_M_READY,(R4)	;READY?

                          5B     13  03D5   751 	BEQL	100$			; IF EQL THEN NO

                       04 A4     B4  03D7   752 	CLRW	XM_PORT(R4)

                                 AB  03DA   753 	BICW3	#^C<<XM$M_CHR_MOP!XM$M_CHR_HDPLX!XM$M_CHR_SLAVE>@8>,-

         3B A5       F2FF 8F         03DB   754 		UCB$L_DEVDEPEND-1(R5),XM_PORT+2(R4); SET MODE DATA

                       06 A4         03E0       

            64            20     AA  03E2   755 	BICW	#XM_I_M_RQSTI,(R4)	; FREE PORT

       00B0 C5            64     B0  03E5   756 	MOVW	XM_I_CSR(R4),UCB$L_XM_LSTCSR(R5); SAVE CSR AND PORT

       00B2 C5         02 A4     B0  03EA   757 	MOVW	XM_O_CSR(R4),UCB$L_XM_LSTCSR+2(R5);

       00AC C5         04 A4     B0  03F0   758 	MOVW	XM_PORT(R4),UCB$L_XM_LSTPRT(R5);

       00AE C5         06 A4     B0  03F6   759 	MOVW	XM_PORT+2(R4),UCB$L_XM_LSTPRT+2(R5);

         02 A4       0040 8F     B0  03FC   760 	MOVW	#XM_O_M_INTEN,XM_O_CSR(R4); ENABLE INTERRUPTS FOR CTRL IN

         02 A4       0040 8F     B0  0402   761 	MOVW	#XM_O_M_INTEN,XM_O_CSR(R4); ENABLE INTERRUPTS FOR CTRL OUT

                                     0408   762 	SETIPL	#IPL$_POWER		; INTERLOCK POWERFAIL

         58 A5            05     E0  040B   763 	BBS	#UCB$V_POWER,UCB$W_STS(R5),100$; BR IF POWER FAILED

                          22         040F       

         3C A5       0800 8F     A8  0410   764 	BISW	#XM$M_STS_ACTIVE,UCB$L_DEVDEPEND(R5); SET ACTIVE STATE

                                     0416   765 	ENBINT				; RETURN TO FORK IPL

                          0094   30  0419   766 	BSBW	FILLFREELIST		; START FIRST RECEIVE AFTER ALLOCATIONS

            53         4C A5     D0  041C   767 	MOVL	UCB$L_IRP(R5),R3	; RETREIVE PACKET ADDRESS

         6C A5       0000'8F     B0  0420   768 	MOVW	#SS$_NORMAL,UCB$W_BOFF(R5); SET SUCCESS

       00A4 C5       0100 8F     A1  0426   769 	ADDW3	#256,UCB$W_XM_QUOTA(R5),UCB$W_BCNT(R5); RETURN QUOTA AS COUNT

                       6E A5         042D       

                          0400   31  042F   770 	BRW	BUSY_IO_DONE		; COMPLETE THE REQUEST

                                     0432   771 ;

                                     0432   772 ; ERROR IN STARTING DEVICE

                                     0432   773 ;

                                     0432   774 100$:					;

                                     0432   775 	ENBINT				; ENABLE INTERRUPTS

                          04DE   31  0435   776 	BRW	SHUTDOWN		;

                                     0438   777 ;

                                     0438   778 ; WAIT ROUTINE

                                     0438   779 ;

                                     0438   780 ; THE STACK CONTAINS A RETURN ADDRESS AND AN IPL

                                     0438   781 ;

                                     0438   782 SYNCH_UNIT:

            64            50     A8  0438   783 	BISW	R0,(R4)			; SET NEW CSR

            64            50     A8  043B   784 	BISW	R0,(R4)			;

                                     043E   785 AWAIT_UNIT:				; WAIT FOR UNIT ONLY

                                     043E   786 	SETIPL	4(SP)			; RE-ENABLE INTERRUPTS

            50       0200 8F     3C  0442   787 	MOVZWL	#^X0200,R0		; SET LOOP COUNT

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  20

V06             START - START UNIT                                                                                              (10)



         58 A5            05     E0  0447   788 10$:	BBS	#UCB$V_POWER,UCB$W_STS(R5),50$; BR IF POWER FAILURE

                          08         044B       

            F8            50     F5  044C   789 	SOBGTR	R0,10$

                                     044F   790 	SETIPL	UCB$B_DIPL(R5)		; RESET IPL UP

                                 05  0453   791 	RSB				; AND RETURN

                                     0454   792 ;

                                     0454   793 ; POWER FAILURE TREAT AS FAILURE TO INITIALIZE

                                     0454   794 ;

            5E            04     C0  0454   795 50$:	ADDL	#4,SP			; POP STACK

                                     0457   796 	ENBINT

                          04B9   31  045A   797 	BRW	SHUTDOWN		; STOP STARTUP

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  21

V06             CHANGE MODE AND CHARACTERISTIC DATA                                                                             (11)



                                     045D   799 	.SBTTL	CHANGE MODE AND CHARACTERISTIC DATA

                                     045D   800 ;++

                                     045D   801 ; CHANGE_MODE - CHANGE MODE AND CHARACTERISTICS FUNCTION PROCESSING

                                     045D   802 ;

                                     045D   803 ; FUNCTIONAL DESCRIPTION:

                                     045D   804 ;

                                     045D   805 ; THIS ROUTINE IS ENTERED FOR CHANGING THE MODE AND CHARACTERISTICS ON AN IDLE

                                     045D   806 ; OR ACTIVE UNIT:

                                     045D   807 ;

                                     045D   808 ; INPUTS:

                                     045D   809 ;

                                     045D   810 ;	R3 = ADDRESS OF THE PACKET

                                     045D   811 ;	R5 = UCB ADDRESS

                                     045D   812 ;

                                     045D   813 ; OUTPUTS:

                                     045D   814 ;	NONE

                                     045D   815 ;--

                                     045D   816 CHANGE_MODE:

                       34 A3     97  045D   817 	DECB	IRP$L_MEDIA(R3)		; VALID DATA BUFFER?

                          1A     12  0460   818 	BNEQ	10$			; IF NEQ THEN NO

         3A A5         36 A3     B0  0462   819 	MOVW	IRP$L_MEDIA+2(R3),UCB$W_DEVBUFSIZ(R5); SET NEW BUFFER SIZE

         3C A5   FFFFF7FF 8F     CA  0467   820 	BICL	#^C<XM$M_STS_ACTIVE>,UCB$L_DEVDEPEND(R5); CLEAR ALL BUT ACTIVE

         38 A3   00000800 8F     CA  046F   821 	BICL	#<XM$M_STS_ACTIVE>,IRP$L_MEDIA+4(R3); CLEAR ACTIVE

         3C A5         38 A3     C8  0477   822 	BISL	IRP$L_MEDIA+4(R3),UCB$L_DEVDEPEND(R5); SET NEW VALUE

                                 05  047C   823 10$:	RSB

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  22

V06             ACP_RECEIVE - PRIVILEGED RECEIVE SUBROUTINE                                                                     (12)



                                     047D   825 	.SBTTL	ACP_RECEIVE - PRIVILEGED RECEIVE SUBROUTINE

                                     047D   826 ;++

                                     047D   827 ; ACP_RECEIVE - ENTRY FOR PRIVILEGED SOFTWARE TO RECEIVE MESSAGES

                                     047D   828 ;

                                     047D   829 ; FUNCTIONAL DESCRIPTION:

                                     047D   830 ;

                                     047D   831 ; THIS ROUTINE IS USED BY PRIVILEGED SOFTWARE TO RECEIVE MESSAGES

                                     047D   832 ; WITHOUT PERFORMING READ QIO'S. THE NEXT AVAILABLE MESSAGE BLOCK

                                     047D   833 ; IS TAKEN FROM THE ATTENTION QUEUE AND GIVEN TO THE CALLER. THE SIZE

                                     047D   834 ; AND OFFSET TO THE DATA ARE SETUP IN BLOCK+12 AND +14.

                                     047D   835 ;

                                     047D   836 ; INPUTS:

                                     047D   837 ;

                                     047D   838 ;	R5 = ADDRESS OF THE UCB

                                     047D   839 ;

                                     047D   840 ; KERNEL MODE AT ANY IPL LOWER THAN DEVICE FORK IPL.

                                     047D   841 ;

                                     047D   842 ; OUTPUTS:

                                     047D   843 ;

                                     047D   844 ;	R0 = 0 IF NO BLOCK , 1 IF FOUND

                                     047D   845 ;	R2 = BLOCK ADDRESS IF FOUND

                                     047D   846 ;	R5 = UCB ADDRESS

                                     047D   847 ;

                                     047D   848 ;	R1,R3,R4 ARE  PRESERVED.

                                     047D   849 ;--

                                     047D   850 ACP_RECEIVE:				; 

                          1A     BB  047D   851 	PUSHR	#^M<R1,R3,R4>		; SAVE REGISTERS

                                     047F   852 	DSBINT	UCB$B_FIPL(R5)

                          50     D4  0486   853 	CLRL	R0			; ASSUME NO RETURN

            52         74 B5     0F  0488   854 	REMQUE	@UCB$Q_XM_ATTN(R5),R2	; GET A BLOCK

                          1C     1D  048C   855 	BVS	40$			; IF V-SET THEN NONE

       00A4 C5         3A A5     A0  048E   856 	ADDW	UCB$W_DEVBUFSIZ(R5),UCB$W_XM_QUOTA(R5); ADJUST QUOTA FOR ALLOCATION

                          52     DD  0494   857 	PUSHL	R2			; SAVE REGISTERS

                          18     10  0496   858 	BSBB	FILLFREELIST		; FILL FREE LIST AND START RECEIVE

                          52   8ED0  0498   859 	POPL	R2			; RESTORE BLOCK ADDRESS

         0E A2            18     9B  049B   860 	MOVZBW	#MSG_DATA,14(R2)	; SET UP OFFSET AND DATA SIZE

         12 A2       C000 8F     AB  049F   861 	BICW3	#^X0C000,MSG_PORT+2(R2),12(R2);

                       0C A2         04A5       

            50            01     9A  04A7   862 	MOVZBL	#1,R0			; SET SUCCESS

                                     04AA   863 40$:	ENBINT				;

                          1A     BA  04AD   864 	POPR	#^M<R1,R3,R4>

                                 05  04AF   865 	RSB

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  23

V06             FILLFREELIST - FILL MESSAGE FREE LIST                                                                           (13)



                                     04B0   867 	.SBTTL	FILLFREELIST - FILL MESSAGE FREE LIST

                                     04B0   868 ;++

                                     04B0   869 ; FILLFREELIST - FILL MESSAGE BLOCK FREE LIST

                                     04B0   870 ;

                                     04B0   871 ; FUNCTIONAL DESCRIPTION:

                                     04B0   872 ;

                                     04B0   873 ; THIS ROUTINE FILLS THE MESSAGE FREE LIST UP TO THE QUOTA ALLOCATED

                                     04B0   874 ; AT UNIT INITIALIZATION.

                                     04B0   875 ;

                                     04B0   876 ; INPUTS:

                                     04B0   877 ;

                                     04B0   878 ;	R5 = UCB

                                     04B0   879 ; 

                                     04B0   880 ; OUTPUT:

                                     04B0   881 ;

                                     04B0   882 ;	R5 = UCB ADDRESS

                                     04B0   883 ;--

                                     04B0   884 FILLFREELIST:				; FILL FREE LIST

       00A4 C5         3A A5     B1  04B0   885 	CMPW	UCB$W_DEVBUFSIZ(R5),UCB$W_XM_QUOTA(R5); ENOUGH SPACE?

                          2A     1A  04B6   886 	BGTRU	100$			; IF GTRU THEN NO, STOP LOOP

                          51     D4  04B8   887 	CLRL	R1			; ZERO SIZE REGISTER

         3A A5            18     A1  04BA   888 	ADDW3	#MSG_DATA,UCB$W_DEVBUFSIZ(R5),R1; GET BLOCK SIZE

                          51         04BE       

                 00000000'GF     16  04BF   889 	JSB	G^EXE$ALONONPAGED		; ALLOCATE THE MEMORY

            1A            50     E9  04C5   890 	BLBC	R0,100$			; IF FAILURE THEN DONE

         08 A2            51     B0  04C8   891 	MOVW	R1,MSG_BLKSIZE(R2)	; INSERT SIZE

         0A A2            00'    90  04CC   892 	MOVB	S^#DYN$C_NET,MSG_BLKTYPE(R2); INSERT TYPE

         0B A2         0B A5     90  04D0   893 	MOVB	UCB$B_FIPL(R5),MSG_FIPL(R2); INSERT FUTURE FORK IPL

       0084 C5            62     0E  04D5   894 	INSQUE	(R2),UCB$Q_XM_FREE(R5)	; INSERT BLOCK ON LIST

       00A4 C5         3A A5     A2  04DA   895 	SUBW	UCB$W_DEVBUFSIZ(R5),UCB$W_XM_QUOTA(R5); REMOVE BLOCK FROM QUOTA

                          CE     11  04E0   896 	BRB	FILLFREELIST		; CONTINUE

                                     04E2   897 100$:	DSBINT	UCB$B_DIPL(R5)

                          04     10  04E9   898 	BSBB	STARTRECEIVE		; START UP A RECEIVE IF POSSIBLE

                                     04EB   899 	ENBINT

                                 05  04EE   900 	RSB

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  24

V06             STARTRECEIVE - START RECEIVE ON UNIT                                                                            (14)



                                     04EF   902 	.SBTTL	STARTRECEIVE - START RECEIVE ON UNIT

                                     04EF   903 ;++

                                     04EF   904 ; STARTRECEIVE - START RECEIVE ON IDLE UNIT

                                     04EF   905 ;

                                     04EF   906 ; FUNCTIONAL DESCRIPTION:

                                     04EF   907 ;

                                     04EF   908 ; THIS ROUTINE REMOVES A FREE MESSAGE BLOCK FROM THE FREE LIST AND IF ONE IS

                                     04EF   909 ; PRESENT, LOADS THE UBA TO MAP IT AND SETS THE STATE TO REQUEST A RECEIVE START.

                                     04EF   910 ;

                                     04EF   911 ; INPUTS:

                                     04EF   912 ;

                                     04EF   913 ;	R5 = UCB ADDRESS

                                     04EF   914 ;

                                     04EF   915 ; OUTPUTS:

                                     04EF   916 ;

                                     04EF   917 ;	CONTROL IS PASSED TO RQSTRCVSTRT.

                                     04EF   918 ;

                                     04EF   919 ;	R5 = UCB ADDRESS

                                     04EF   920 ;

                                     04EF   921 ;--

                                     04EF   922 STARTRECEIVE:				; START RECEIVE OPERATION

            54       008C C5     9E  04EF   923 	MOVAB	UCB$Q_XM_CURCV1(R5),R4	; ADDRESS FIRST RECEIVE CONTROL BLOCK

                       01 A4     95  04F4   924 	TSTB	1(R4)			; IDLE?

                          09     13  04F7   925 	BEQL	10$			; IF EQL THEN GO

            54            08     C0  04F9   926 	ADDL	#8,R4			; POINT TO NEXT BLOCK

                       01 A4     95  04FC   927 	TSTB	1(R4)			; IDLE?

                          01     13  04FF   928 	BEQL	10$			; IF EQL THEN GO

                                 05  0501   929 5$:	RSB				; RETURN, NOTHING TO DO

            52       0084 D5     0F  0502   930 10$:	REMQUE	@UCB$Q_XM_FREE(R5),R2	; REMOVE FREE BLOCK FROM LIST

                          F8     1D  0507   931 	BVS	5$			; IF V-SET THEN NONE

         04 A4            52     D0  0509   932 	MOVL	R2,4(R4)		; SAVE BLOCK ADDRESS

         01 A4            01     90  050D   933 	MOVB	#XM_RCV_M_INUS,1(R4)	; SET CONTROL BLOCK INUSE

         0E A2         3A A5     B0  0511   934 	MOVW	UCB$W_DEVBUFSIZ(R5),MSG_UBVA+2(R2); INSERT SIZE

            51         18 A2     9E  0516   935 	MOVAB	MSG_DATA(R2),R1		; ADDRESS BUFFER ITSELF

         0C A2            51     B0  051A   936 	MOVW	R1,MSG_UBVA(R2)		; INSERT BUFFER OFFSET

            09         02 A4     F0  051E   937 	INSV	2(R4),#9,#7,MSG_UBVA(R2); INSERT MAP REGISTER DATA

         0C A2            07         0522       

            02            07     EF  0525   938 	EXTZV	#7,#2,2(R4),R3		; GET TWO HIGH BITS

            53         02 A4         0528       

            1E            53     F0  052B   939 	INSV	R3,#30,#2,MSG_UBVA(R2)	; INSERT IN UBVA

         0C A2            02         052E       

                                     0531   940 ;

                                     0531   941 ; BUILD UBA MAP REGISTER DATA AND LOAD MAP

                                     0531   942 ;

            53         02 A4     3C  0531   943 	MOVZWL	2(R4),R3		; GET FIRST MAP REG NUMBER

            07            00     EF  0535   944 	EXTZV	#0,#7,(R4),R4		; GET DATA PATH NUMBER

            54            64         0538       

            54       0400 8F     A8  053A   945 	BISW	#^X0400,R4		; MERGE WITH VALID BIT

            52         20 A5     D0  053F   946 	MOVL	UCB$L_CRB(R5),R2	; ADDRESS ADAPTER

            52         28 B2     D0  0543   947 	MOVL	@CRB$L_INTD+VEC$L_ADP(R2),R2;

            52       0800 C243   DE  0547   948 	MOVAL	UBA$L_MAP(R2)[R3],R2	; ADDRESS MAP IN ADAPTER

                          56     DD  054D   949 	PUSHL	R6			;

            56         3A A5     3C  054F   950 	MOVZWL	UCB$W_DEVBUFSIZ(R5),R6	; GET NUMBER OF MAPS TO LOAD

            00'           00'    EF  0553   951 	EXTZV	S^#VA$V_BYTE,S^#VA$S_BYTE,R1,R3; GET OFFSET OF BUFFER

            53            51         0556       

            56       01FF C643   9E  0558   952 	MOVAB	^X01FF(R6)[R3],R6	; CALC HIGHEST RELITIVE ADDRESS

            56         F7 8F     78  055E   953 	ASHL	#-9,R6,R6		; GET NUMBER OF MAPS TO LOAD

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  25

V06             STARTRECEIVE - START RECEIVE ON UNIT                                                                            (14)



                          56         0562       

            00'           00'    EF  0563   954 	EXTZV	S^#VA$V_VPN,S^#VA$S_VPN,R1,R1; GET PTE INDEX OF VA

            51            51         0566       

            50   00000000'GF     D0  0568   955 	MOVL	G^MMG$GL_SPTBASE,R0	;

            51            6041   DE  056F   956 	MOVAL	(R0)[R1],R1		; ADDRESS PTE FOR BUFFER

            53            81     D0  0573   957 20$:	MOVL	(R1)+,R3		; GET PTE

                          06     19  0576   958 	BLSS	25$			; IF LESS THEN VALID

                 00000000'GF     16  0578   959 	JSB	G^IOC$PTETOPFN		; VALIDATE IT

            15            54     F0  057E   960 25$:	INSV	R4,#21,#11,R3		; MERGE UBA DATA BITS

            53            0B         0581       

            82            53     D0  0583   961 	MOVL	R3,(R2)+		; LOAD MAP

            EA            56     F5  0586   962 	SOBGTR	R6,20$			; CONTINUE UNTIL DONE

                          62     D4  0589   963 	CLRL	(R2)			; ZERO FINAL

                          56   8ED0  058B   964 	POPL	R6			; RESTORE REGISTER

                          64     11  058E   965 	BRB	RQSTRCVSTRT		; REQUEST RECEIVE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  26

V06             PORT_INTR - DMC-11 PORT READY INTERRUPT SERVICE                                                                 (15)



                                     0590   967 	.SBTTL	PORT_INTR - DMC-11 PORT READY INTERRUPT SERVICE

                                     0590   968 ;++

                                     0590   969 ; PORT_INTR - DMC-11 PORT READY INTERRUPT SERVICE

                                     0590   970 ;

                                     0590   971 ; FUNCTIONAL DESCRIPTION:

                                     0590   972 ;

                                     0590   973 ; THIS INTERRUPT OCCURS WHEN THE PORT IS READY FOR THE DRIVER TO PASS DATA

                                     0590   974 ; TO THE DMC-11. PRIOR TO THIS, THE REQUEST FOR THE PORT WAS MADE BY

                                     0590   975 ; RQSTRCVSTRT/RQSTXMITSTRT. AFTER THE PORT IS LOADED, IT IS FREED. IF MORE

                                     0590   976 ; RECEIVE BUFFERS ARE FREE THEN ANOTHER PORT LOAD IS REQUESTED.

                                     0590   977 ;

                                     0590   978 ; INPUTS:

                                     0590   979 ;

                                     0590   980 ;	0(SP) = ADDRESS OF THE UNIT IDB ADDRESS

                                     0590   981 ;

                                     0590   982 ;	R1,R2,R3,R4,R5 ARE AT 4(SP)

                                     0590   983 ;

                                     0590   984 ; OUTPUTS:

                                     0590   985 ;

                                     0590   986 ;	INTERRUPT IS DISMISSED.

                                     0590   987 ;--

                                     0590   988 PORT_INTR:				; DMC11 INPUT PORT AVAILABLE

            54            9E     D0  0590   989 	MOVL	@(SP)+,R4		; GET IDB ADDRESS

            55         10 A4     D0  0593   990 	MOVL	IDB$L_UCBLST(R4),R5	; ADDRESS UCB

            54            64     D0  0597   991 	MOVL	(R4),R4			; R4= CSR

         58 A5            03     AA  059A   992 	BICW	#UCB$M_TIM!UCB$M_INT,UCB$W_STS(R5); DISABLE TIMEOUT AND INTERRUPT EXPEC

            64            04     B3  059E   993 	BITW	#XM_I_M_RCV,XM_I_CSR(R4); RECEIVE?

                          26     13  05A1   994 	BEQL	90$			; IF EQL THEN TRANSMIT

            53       008C C5     9E  05A3   995 	MOVAB	UCB$Q_XM_CURCV1(R5),R3	; ADDRESS FIRST CONTROL BLOCK

         01 A3            00     E0  05A8   996 	BBS	#XM_RCV_V_INUS,1(R3),20$; BR IF FIRST BLOCK AVAIL

                          08         05AC       

            53            08     C0  05AD   997 	ADDL	#8,R3			; POINT TO NEXT BLOCK

         01 A3            00     E1  05B0   998 	BBC	#XM_RCV_V_INUS,1(R3),100$; BR IF THIS BLOCK NOT AVAIL

                          2D         05B4       

         01 A3            02     90  05B5   999 20$:	MOVB	#XM_RCV_M_INPR,1(R3)	; SET CONTROL BLOCK IN PROGRESS

            52         04 A3     D0  05B9  1000 	MOVL	4(R3),R2		; LOAD PORT

         04 A4         0C A2     B0  05BD  1001 	MOVW	MSG_UBVA(R2),XM_PORT(R4); LOAD PORT

         06 A4         0E A2     B0  05C2  1002 	MOVW	MSG_UBVA+2(R2),XM_PORT+2(R4);

                          19     11  05C7  1003 	BRB	100$			; CONTINUE IN COMMON

         5A A5            08     E5  05C9  1004 90$:	BBCC	#XM_DS_V_XMTPND,UCB$W_DEVSTS(R5),100$; XMIT PENDING?

                          14         05CD       

         5A A5       0200 8F     A8  05CE  1005 	BISW	#XM_DS_M_XMTINP,UCB$W_DEVSTS(R5)

            53         4C A5     D0  05D4  1006 	MOVL	UCB$L_IRP(R5),R3	; GET PACKET ADDRESS

         04 A4         34 A3     B0  05D8  1007 	MOVW	IRP$L_MEDIA(R3),XM_PORT(R4); LOAD PORT

         06 A4         36 A3     B0  05DD  1008 	MOVW	IRP$L_MEDIA+2(R3),XM_PORT+2(R4);

            64            20     AA  05E2  1009 100$:	BICW	#XM_I_M_RQSTI,XM_I_CSR(R4); FREE PORT

                          FF07   30  05E5  1010 	BSBW	STARTRECEIVE		; START SOMETHING

                          14     10  05E8  1011 	BSBB	REQUEST_PORT		; REQUEST PORT AGAIN IF NECESSARY

                                     05EA  1012 INTEXIT:				; EXIT INTERRUPT

            50            8E     7D  05EA  1013 	MOVQ	(SP)+,R0		; RESTORE REGISTERS

            52            8E     7D  05ED  1014 	MOVQ	(SP)+,R2		;

            54            8E     7D  05F0  1015 	MOVQ	(SP)+,R4		;

                                 02  05F3  1016 	REI				;

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  27

V06             RQSTRCVSTRT/RQSTXMITSTRT/                                                                                       (16)



                                     05F4  1018 	.SBTTL	RQSTRCVSTRT/RQSTXMITSTRT/

                                     05F4  1019 	.ENABL	LSB

                                     05F4  1020 ;++

                                     05F4  1021 ; RQSTRCVSTRT - REQUEST PORT FOR RECEIVE START

                                     05F4  1022 ; RQSTXMITSTRT - REQUEST PORT FOR XMIT START

                                     05F4  1023 ;

                                     05F4  1024 ; FUNCTIONAL DESCRIPTION:

                                     05F4  1025 ;

                                     05F4  1026 ; EACH OF THESE ROUTINES SETS UP THE PROPER PORT DATA, SETS THE STATE BIT,

                                     05F4  1027 ; SETS THE UNIT IN A WAIT FOR INTERRUPT STATE ( 5 SECOND TIMEOUT ) AND

                                     05F4  1028 ; REQUESTS THE PORT.

                                     05F4  1029 ;

                                     05F4  1030 ; INPUTS:

                                     05F4  1031 ;

                                     05F4  1032 ;	R5 = UCB

                                     05F4  1033 ;

                                     05F4  1034 ; OUTPUTS:

                                     05F4  1035 ;

                                     05F4  1036 ;	R5 = UCB

                                     05F4  1037 ;--

                                     05F4  1038 RQSTRCVSTRT:				; REQUSET RECEIVE START

            52            24     9A  05F4  1039 	MOVZBL	#XM_DS_M_RQSTRCV!XM_DS_M_REQUEST,R2; ENABLE REQUEST

                          0B     11  05F7  1040 	BRB	50$			;

                                     05F9  1041 RQSTXMITSTRT:				; REQUEST XMIT START

            52            28     9A  05F9  1042 	MOVZBL	#XM_DS_M_RQSTXMT!XM_DS_M_REQUEST,R2

                          06     11  05FC  1043 	BRB	50$			;

                                     05FE  1044 ;

                                     05FE  1045 ; REQUEST PORT

                                     05FE  1046 ;

                                     05FE  1047 REQUEST_PORT:				;

            52         5A A5     9A  05FE  1048 	MOVZBL	UCB$W_DEVSTS(R5),R2	; GET THE REQUEST TO DO

                          5A     13  0602  1049 	BEQL	180$			; IF EQL THEN NOTHING TO START

            54         20 A5     D0  0604  1050 50$:	MOVL	UCB$L_CRB(R5),R4	; GET CRB ADDRESS

            54         1C B4     D0  0608  1051 	MOVL	@CRB$L_INTD+VEC$L_IDB(R4),R4; GET CSR ADDRESS

                                     060C  1052 	DSBINT				; LOCK OUT DEVICE INTERRUPTS

         58 A5            22     93  0612  1053 	BITB	#UCB$M_INT!UCB$M_POWER,UCB$W_STS(R5); INTERRUPT EXPECTED OR POWERFAIL?

                          3F     12  0616  1054 	BNEQ	150$			; IF NEQ THEN YES

   00000000'GF            05     C1  0618  1055 	ADDL3	#5,G^EXE$GL_ABSTIM,UCB$L_DUETIM(R5); SET UP TIMER

                       5C A5         061F       

         58 A5            03     88  0621  1056 	BISB	#UCB$M_INT!UCB$M_TIM,UCB$W_STS(R5); SET INTERRUPT EXPECTED AND ENABLE TIMEOUT

                                     0625  1057 	ENBINT				; RESET INTERRUPTS

            64       0080 8F     B3  0628  1058 100$:	BITW	#XM_I_M_READY,(R4)	; DMC DONE WITH PORT?

                                 01  062D  1059 	NOP				; RELEASE UBA

                                 01  062E  1060 	NOP

                                 01  062F  1061 	NOP

                                 01  0630  1062 	NOP

                                 01  0631  1063 	NOP

                                 01  0632  1064 	NOP

                                 01  0633  1065 	NOP

                                 01  0634  1066 	NOP

                                 01  0635  1067 	NOP

                                 01  0636  1068 	NOP

                          EF     12  0637  1069 	BNEQ	100$			; IF NEQ THEN NO

            52            08     8A  0639  1070 	BICB	#XM_DS_M_RQSTXMT,R2	; REMOVE BIT FOR REQUEST OF TRANSMIT

            52         40 8F     88  063C  1071 	BISB	#XM_I_M_INTEN,R2	; INSERT INTERRUPT ENABLE

            64            52     A8  0640  1072 	BISW	R2,(R4)			; MAKE REQUEST

         5A A5            02     E4  0643  1073 	BBSC	#XM_DS_V_RQSTRCV,UCB$W_DEVSTS(R5),120$; BR AND CLEAR RECEIVE REQUEST

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  28

V06             RQSTRCVSTRT/RQSTXMITSTRT/                                                                                       (16)



                          04         0647       

         5A A5            08     8A  0648  1074 	BICB	#XM_DS_M_RQSTXMT,UCB$W_DEVSTS(R5); CLEAR TRANSMIT REQUEST

         5A A5            08     93  064C  1075 120$:	BITB	#XM_DS_M_RQSTXMT,UCB$W_DEVSTS(R5); ANY LEFT?

                          0C     12  0650  1076 	BNEQ	180$			; IF YES THEN OK

         5A A5            20     8A  0652  1077 	BICB	#XM_DS_M_REQUEST,UCB$W_DEVSTS(R5); CLEAR REQUEST

                                 05  0656  1078 	RSB

                                     0657  1079 ;

                                     0657  1080 ; REQUEST NOT DONE

                                     0657  1081 ;

         5A A5            52     A8  0657  1082 150$:	BISW	R2,UCB$W_DEVSTS(R5)	; LEAVE REQUEST PENDING

                                     065B  1083 	ENBINT				; RESET IPL

                                 05  065E  1084 180$:	RSB				

                                     065F  1085  

                                     065F  1086 	.DSABL	LSB

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  29

V06             CONTROL_INTR - DMC11 CONTROL INTERRUPT                                                                          (17)



                                     065F  1088 	.SBTTL	CONTROL_INTR - DMC11 CONTROL INTERRUPT

                                     065F  1089 ;++

                                     065F  1090 ; CONTROL_INTR - DMC11 CONTROL INTERRUPT

                                     065F  1091 ;

                                     065F  1092 ; FUNCTIONAL DESCRIPTION:

                                     065F  1093 ;

                                     065F  1094 ; THIS ROUTINE IS THE INTERRUPT SERVICE FOR DMC11 CONTROL INTERRUPTS.

                                     065F  1095 ; THE INTERRUPTS CAN SIGNAL RECEIVE OR TRANSMIT BUFFER DONE AND ERRORS.

                                     065F  1096 ;

                                     065F  1097 ; INPUTS:

                                     065F  1098 ;

                                     065F  1099 ;	00(SP) = ADDRESS OF UNIT IDB ADDRESS

                                     065F  1100 ;

                                     065F  1101 ;	R1,R2,R3,R4,R5 ARE AT 4(SP)

                                     065F  1102 ;

                                     065F  1103 ; OUTPUTS:

                                     065F  1104 ;

                                     065F  1105 ;	THE INTERRUPT IS DISMISSED

                                     065F  1106 ;

                                     065F  1107 ; IMPLICIT OUTPUTS:

                                     065F  1108 ;

                                     065F  1109 ;	IF THE INTERRUPT SIGNALS AN ERROR,

                                     065F  1110 ;		THE PORT IS HELD AND A FORK IS DONE ON THE UCB CONTEXT

                                     065F  1111 ;		TO THE ERROR PROCESSING LOGIC.

                                     065F  1112 ;

                                     065F  1113 ;	IF THE INTERRUPT SIGNALS RECEIVE DONE,

                                     065F  1114 ;		THE PORT IS FREED.

                                     065F  1115 ;		THE NEXT RECEIVE IS STARTED IF POSSIBLE.

                                     065F  1116 ;		A FORK IS CREATED USING THE MESSAGE BLOCK TO COMPLETE THE OPERATION.

                                     065F  1117 ;

                                     065F  1118 ;	IF THE INTERRUPT SIGNALS XMIT DONE,

                                     065F  1119 ;		THE PORT IS FREED. A FORK TO PROCESS THE COMPLETED MESSAGE

                                     065F  1120 ;		IS DONE ON THE CURRENT I/O PACKET.

                                     065F  1121 ;--

                                     065F  1122 CONTROL_INTR:				; DMC11 CONTROL INTERRUPT

            54         00 BE     D0  065F  1123 	MOVL	@(SP),R4		; GET IDB ADDRESS

            55         10 A4     D0  0663  1124 	MOVL	IDB$L_UCBLST(R4),R5	; ADDRESS UCB

            54            64     D0  0667  1125 	MOVL	(R4),R4			; ADDRESS CSR

            6E       FF7C CF     3E  066A  1126 	MOVAW	W^INTEXIT,(SP)		; SET UP RETURN ADDRESS

         3C A5            0B     E1  066F  1127 	BBC	#XM$V_STS_ACTIVE,UCB$L_DEVDEPEND(R5),5$; BR IF NOT ACTIVE

                          32         0673       

            52         02 A4     B0  0674  1128 	MOVW	XM_O_CSR(R4),R2		; GET ENTIRE CSR

            52            10     78  0678  1129 	ASHL	#16,R2,R2		; SHIFT

                          52         067B       

            52            64     B0  067C  1130 	MOVW	XM_I_CSR(R4),R2		; AND LOAD LOW

            53         06 A4     B0  067F  1131 	MOVW	XM_PORT+2(R4),R3	; GET ENTIRE PORT

            53            10     78  0683  1132 	ASHL	#16,R3,R3

                          53         0686       

            53         04 A4     B0  0687  1133 	MOVW	XM_PORT(R4),R3		;

            52   00030000 8F     D3  068B  1134 	BITL	#<XM_O_M_TYPE>@16,R2	; READ OR WRITE ?

                          13     13  0692  1135 	BEQL	10$			; IF EQL THEN YES

            55       009C C5     9E  0694  1136 	MOVAB	UCB$L_XM_ERRFKB(R5),R5	; ADDRESS FORK BLOCK FOR ERROR FORK

                     08C7'CF     9F  0699  1137 	PUSHAB	W^ERRORFORK		; SET UP FORK PROCESS ADDR

            54            52     D0  069D  1138 	MOVL	R2,R4			; SAVE CSR'S AS DATA IN FORK

                 00000000'GF     17  06A0  1139 	JMP	G^EXE$FORK		; FORK

                                 05  06A6  1140 5$:	RSB				; RETURN

       00B0 C5            52     D0  06A7  1141 10$:	MOVL	R2,UCB$L_XM_LSTCSR(R5)	; SAVE PORT AND CSR

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  30

V06             CONTROL_INTR - DMC11 CONTROL INTERRUPT                                                                          (17)



       00AC C5            53     D0  06AC  1142 	MOVL	R3,UCB$L_XM_LSTPRT(R5)	;

         02 A4       0040 8F     B0  06B1  1143 	MOVW	#XM_O_M_INTEN,2(R4)	; FREE PORT

            52   00040000 8F     D3  06B7  1144 	BITL	#XM_O_M_RCV@16,R2	; WAS IT XMIT DONE?

                          4D     13  06BE  1145 	BEQL	40$			; IF EQL THEN YES

            51            53     D0  06C0  1146 	MOVL	R3,R1			; COPY PORT DATA

            10         3A A5     F0  06C3  1147 	INSV	UCB$W_DEVBUFSIZ(R5),#16,#14,R1; RESTORE ORIGINAL DATA

            51            0E         06C7       

            54       008C C5     9E  06C9  1148 	MOVAB	UCB$Q_XM_CURCV1(R5),R4	; ADDRESS CONTROL BLOCK

         01 A4            01     E1  06CE  1149 	BBC	#XM_RCV_V_INPR,1(R4),15$; BR IF NOT IN USE

                          0A         06D2       

            52         04 A4     D0  06D3  1150 	MOVL	4(R4),R2		; ADDRESS BLOCK

         0C A2            51     D1  06D7  1151 	CMPL	R1,MSG_UBVA(R2)		; IS THIS THE BLOCK?

                          14     13  06DB  1152 	BEQL	20$			; IF EQL THEN YES

            54       0094 C5     9E  06DD  1153 15$:	MOVAB	UCB$Q_XM_CURCV2(R5),R4	; ADDRESS OTHER CONTROL BLOCK

         01 A4            01     E1  06E2  1154 	BBC	#XM_RCV_V_INPR,1(R4),120$; BR IF NOT IN PROGRESS

                          67         06E6       

            52         04 A4     D0  06E7  1155 	MOVL	4(R4),R2		; ADDRESS BLOCK

         0C A2            51     D1  06EB  1156 	CMPL	R1,MSG_UBVA(R2)		; THIS MESSAGE

                          5D     12  06EF  1157 	BNEQ	120$			; IF NEQ THEN NO

                       01 A4     94  06F1  1158 20$:	CLRB	1(R4)			; IDLE CONTROL BLOCK

                          52     DD  06F4  1159 	PUSHL	R2			; SAVE BLOCK ADDRESS

                          28     BB  06F6  1160 	PUSHR	#^M<R3,R5>		; SAVE PORT DATA AND UCB

            51            64     9A  06F8  1161 	MOVZBL	(R4),R1			; PURGE DATA PATH

                          52     10  06FB  1162 	BSBB	PURGE_DATAPATH		; 

            03            50     E8  06FD  1163 	BLBS	R0,30$			; IF LOW SET THEN NO ERROR

                       12 A2     B4  0700  1164 	CLRW	MSG_PORT+2(R2)		; SET NO TRANSFER

                          FDE9   30  0703  1165 30$:	BSBW	STARTRECEIVE		; START A NEW RECEIVE IF POSSIBLE

                          38     BA  0706  1166 	POPR	#^M<R3,R4,R5>		; R3 = PORT DATA, R4 = UCB, R5 = BLOCK ADDR

                       71'AF     9F  0708  1167 	PUSHAB	B^RCVDONEFORK		; SET UP FORK PROCESS ADDR

                          3B     11  070B  1168 	BRB	110$			; CONTINUE TO FREE PORT

         5A A5            09     E5  070D  1169 40$:	BBCC	#XM_DS_V_XMTINP,UCB$W_DEVSTS(R5),120$; BR IF NOT IN PROGRESS

                          3C         0711       

         6C A5            53     D0  0712  1170 	MOVL	R3,UCB$W_BOFF(R5)	; SAVE TRANSFER DATA

            51         20 A5     D0  0716  1171 	MOVL	UCB$L_CRB(R5),R1	; ADDRESS CRB

            51         27 A1     9A  071A  1172 	MOVZBL	CRB$L_INTD+VEC$B_DATAPATH(R1),R1; PURGE DATA PATH

                          2F     10  071E  1173 	BSBB	PURGE_DATAPATH		;

            03            50     E8  0720  1174 	BLBS	R0,45$			; BR IF NO ERROR

                       6E A5     B4  0723  1175 	CLRW	UCB$W_BCNT(R5)		; SET NO TRANSFER

            54            55     D0  0726  1176 45$:	MOVL	R5,R4			; SAVE UCB IN FORK

         6C A5            53     D0  0729  1177 	MOVL	R3,UCB$W_BOFF(R5)	; SAVE TRANSFER DATA

            55         4C A5     D0  072D  1178 	MOVL	UCB$L_IRP(R5),R5	; ADDRESS CURRENT PACKET

         34 A5         0C A5     D0  0731  1179 	MOVL	IRP$L_PID(R5),IRP$L_MEDIA(R5);SAVE PACKET DATA FROM FORK

         38 A5         0B A5     90  0736  1180 	MOVB	IRP$B_RMOD(R5),IRP$L_MEDIA+4(R5); SAVE RMODE

         0B A5         0B A4     90  073B  1181 	MOVB	UCB$B_FIPL(R4),IRP$B_RMOD(R5); SET IPL FOR FORK

            53         10 A5     7D  0740  1182 	MOVQ	IRP$L_AST(R5),R3	;

                     07FD'CF     9F  0744  1183 	PUSHAB	W^XMITDONEFORK		; XMIT DONE FORK

                 00000000'GF     17  0748  1184 110$:	JMP	G^EXE$FORK		; FORK

                                 05  074E  1185 120$:	RSB				; RETURN

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  31

V06             PURGE_DATAPATH                                                                                                  (18)



                                     074F  1187 	.SBTTL	PURGE_DATAPATH

                                     074F  1188 ;++

                                     074F  1189 ; PURGE_DATAPATH

                                     074F  1190 ;

                                     074F  1191 ; FUNCTIONAL DESCRIPTION:

                                     074F  1192 ;

                                     074F  1193 ; THIS ROUTINE PURGES THE UBA DATAPATH PASSED AS AN ARGUMENT.

                                     074F  1194 ;

                                     074F  1195 ; INPUTS:

                                     074F  1196 ;

                                     074F  1197 ;	R1 = DATA PATH NUMBER

                                     074F  1198 ;	R5 = UCB ADDRESS

                                     074F  1199 ;

                                     074F  1200 ; OUTPUTS:

                                     074F  1201 ;

                                     074F  1202 ;	R0 IS DISTROYED

                                     074F  1203 ;--

                                     074F  1204 PURGE_DATAPATH:				;

            50         20 A5     D0  074F  1205 	MOVL	UCB$L_CRB(R5),R0	; ADDRESS CRB

            50         28 B0     D0  0753  1206 	MOVL	@CRB$L_INTD+VEC$L_ADP(R0),R0; ADDRESS ADAPTER

            51   FFFFFFF8 8F     CA  0757  1207 	BICL	#^C<7>,R1		; REMOVE LOCK BIT

                          10     13  075E  1208 	BEQL	10$			; IF EQL THEN NO PURGE

            01            1F     78  0760  1209 	ASHL	#UBA$V_DPR_BNE,#1,UBA$L_DPR(R0)[R1]; PURGE DP

                       40 A041       0763       

         40 A041          01     78  0766  1210 	ASHL	#31-UBA$V_DPR_XMTER,UBA$L_DPR(R0)[R1],R1; ERROR?

                          51         076B       

                          02     19  076C  1211 	BLSS	10$			; IF LSS THEN YES

                          50     D6  076E  1212 	INCL	R0			; SET SUCCESS

                                 05  0770  1213 10$:	RSB				; CONTINUE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  32

V06             RCVDONEFORK - RECEIVE DONE FORK PROCESS                                                                         (19)



                                     0771  1215 	.SBTTL	RCVDONEFORK - RECEIVE DONE FORK PROCESS

                                     0771  1216 ;++

                                     0771  1217 ; RCVDONEFORK - RECEIVE DONE FORK PROCESS 

                                     0771  1218 ;

                                     0771  1219 ; FUNCTIONAL DESCRIPTION:

                                     0771  1220 ;

                                     0771  1221 ; THIS ROUTINE IS ENTERED AT DEVICE FORK LEVEL WHEN A RECEIVE BUFFER DONE

                                     0771  1222 ; HAS OCCURED. THE COMPLETED MESSAGE BLOCK IS USED AS THE FORK BLOCK.

                                     0771  1223 ;

                                     0771  1224 ; INPUTS:

                                     0771  1225 ;

                                     0771  1226 ;	R3 = PORT DATA

                                     0771  1227 ;	R4 = UCB ADDRESS

                                     0771  1228 ;	R5 = ADDRESS OF THE MESSAGE BLOCK OR FORK BLOCK

                                     0771  1229 ;

                                     0771  1230 ; OUTPUTS:

                                     0771  1231 ;

                                     0771  1232 ;	R5 = UCB ADDRESS

                                     0771  1233 ;

                                     0771  1234 ;--

                                     0771  1235 RCVDONEFORK:				; RECEIVE DONE FORK

            52            55     D0  0771  1236 	MOVL	R5,R2			; COPY ADDRESS OF THE MESSAGE BLOCK

            55            54     D0  0774  1237 	MOVL	R4,R5			; RESTORE UCB ADDRESS

            53         7C B5     0F  0777  1238 	REMQUE	@UCB$Q_XM_RCVS(R5),R3	; REMOVE WAITING RECEIVE

                          1B     1C  077B  1239 	BVC	FINISH_RCV_IO		; IF FOUND THEN FINISH THE I/O

         78 B5            62     0E  077D  1240 	INSQUE	(R2),@UCB$Q_XM_ATTN+4(R5); QUEUE MESSAGE BLOCK

                          54     D4  0781  1241 	CLRL	R4			; SET NO MAILBOX

         5A A5            0B     E0  0783  1242 	BBS	#XM_DS_V_NOTIF,UCB$W_DEVSTS(R5),30$; BR IF ALREADY NOTIFIED

                          03         0787       

            54            0B     9A  0788  1243 	MOVZBL	#MSG$_XM_DATAVL,R4	; SET MESSAGE TYPE

                          00E0   30  078B  1244 30$:	BSBW	POKE_USER		; POKE THE USER

            06            50     E9  078E  1245 	BLBC	R0,40$			; IF LOW CLEAR THEN NOT SENT

         5A A5       0800 8F     A8  0791  1246 	BISW	#XM_DS_M_NOTIF,UCB$W_DEVSTS(R5); SET NOTIFIED

                                 05  0797  1247 40$:	RSB				; RETURN FROM FORK

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  33

V06             FINISH_RCV_IO - FINISH RECEIVE QIO PROCESSING                                                                   (20)



                                     0798  1249 	.SBTTL	FINISH_RCV_IO - FINISH RECEIVE QIO PROCESSING

                                     0798  1250 ;++

                                     0798  1251 ; FINISH_RCV_IO - FINISH RECEIVE QIO PROCESSING

                                     0798  1252 ;

                                     0798  1253 ; FUNCTIONAL DESCRIPTION:

                                     0798  1254 ;

                                     0798  1255 ; THIS ROUTINE COMPLETES A RECEIVE OPERATION THAT HAS BEEN MATCHED WITH A

                                     0798  1256 ; MESSAGE BLOCK. AFTER THE RECEIVE HAS BEEN COMPLETED THE MESSAGE FREE LIST IS FILLE

                                     0798  1257 ; AND A RECEIVE IS STARTED IF NEEDED.

                                     0798  1258 ;

                                     0798  1259 ; INPUTS:

                                     0798  1260 ;

                                     0798  1261 ;	R2 = ADDRESS OF MESSAGE BLOCK OR 0 IF THE I/O IS TO ABORTED

                                     0798  1262 ;	R3 = PACKET ADDRESS OF THE RCV QIO

                                     0798  1263 ;	R5 = UCB ADDRESS

                                     0798  1264 ;

                                     0798  1265 ; OUTPUTS:

                                     0798  1266 ;

                                     0798  1267 ;	R5 = UCB ADDRESS

                                     0798  1268 ;--

                                     0798  1269 FINISH_RCV_IO:				; FINISH RCV QIO PROCESSING

         2C A3            52     D0  0798  1270 	MOVL	R2,IRP$L_SVAPTE(R3)	; SAVE BLOCK ADDRESS

            62         18 A2     9E  079C  1271 	MOVAB	MSG_DATA(R2),(R2)	; SET UP BLOCK FOR DATA MOVE

         04 A2         34 A3     D0  07A0  1272 	MOVL	IRP$L_MEDIA(R3),4(R2)	; INSERT SAVED USER VIRTUAL ADDRESS

       00A4 C5         3A A5     A0  07A5  1273 	ADDW	UCB$W_DEVBUFSIZ(R5),UCB$W_XM_QUOTA(R5); ADJUST UNIT QUOTA

         12 A2       C000 8F     AB  07AB  1274 	BICW3	#^X0C000,MSG_PORT+2(R2),R1; GET SIZE OF TRANSFER

                          51         07B1       

         32 A3            51     B1  07B2  1275 	CMPW	R1,IRP$W_BCNT(R3)	; REQUEST LARGER THAN ACTUAL?

                          04     1B  07B6  1276 	BLEQU	20$			; BR IF NO

            51         32 A3     3C  07B8  1277 	MOVZWL	IRP$W_BCNT(R3),R1	; SET SIZE TO MINIMUM OF TWO SIZES

         32 A3            51     B0  07BC  1278 20$:	MOVW	R1,IRP$W_BCNT(R3)	; SET SIZE TO TRANSFER

            51            10     78  07C0  1279 	ASHL	#16,R1,R0		; SET UP STATUS

                          50         07C3       

                          07     12  07C4  1280 	BNEQ	25$			; IF NEQ THEN SUCCESS

            50       0000'8F     B0  07C6  1281 	MOVW	#SS$_CTRLERR,R0		; SET DATA PATH ERROR

                          05     11  07CB  1282 	BRB	30$			; AND CONTINUE

            50       0000'8F     B0  07CD  1283 25$:	MOVW	#SS$_NORMAL,R0		;

                          03     10  07D2  1284 30$:	BSBB	RCV_IO_DONE		; COMPLETE THE REQUEST

                          FCD9   31  07D4  1285 	BRW	FILLFREELIST		; CONTINUE

                                     07D7  1286 ;

                                     07D7  1287 ; COMPLETE A RECEIVE I/O OPERATION

                                     07D7  1288 ;

                                     07D7  1289 RCV_IO_DONE:				; COMPLETE A RECEIVE I/O OPERATION

         34 A3            50     D0  07D7  1290 	MOVL	R0,IRP$L_MEDIA(R3)	; SAVE SIZE AND STATUS

         38 A3         3C A5     D0  07DB  1291 	MOVL	UCB$L_DEVDEPEND(R5),IRP$L_MEDIA+4(R3);

         2A A3            07     E1  07E0  1292 	BBC	#IRP$V_DIAGBUF,IRP$W_STS(R3),20$; BR IF NO DIAGNOSTIC BUFFER

                          12         07E4       

         44 B3            08     C1  07E5  1293 	ADDL3	#8,@IRP$L_DIAGBUF(R3),R0; ADDRESS BUFFER PAST START TIME

                          50         07E9       

            80   00000000'GF     7D  07EA  1294 	MOVQ	G^EXE$GQ_SYSTIME,(R0)+	; INSERT STOP TIME

            80         72 A5     3C  07F1  1295 	MOVZWL	UCB$W_ERRCNT(R5),(R0)+	; INSERT ERROR COUNTER

                          4F     10  07F5  1296 	BSBB	REGDUMP			; DUMP REGISTERS

                 00000000'GF     17  07F7  1297 20$:	JMP	G^COM$POST		; POST THE I/O

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  34

V06             XMITDONEFORK - TRANSMIT DONE FORK PROCESS                                                                       (21)



                                     07FD  1299 	.SBTTL	XMITDONEFORK - TRANSMIT DONE FORK PROCESS

                                     07FD  1300 ;++

                                     07FD  1301 ; XMITDONEFORK - TRANSMIT DONE FORK PROCESS

                                     07FD  1302 ;

                                     07FD  1303 ; FUNCTIONAL DESCRIPTION:

                                     07FD  1304 ;

                                     07FD  1305 ; THIS ROUTINE IS A FOR PROCESS TO COMPLETE TRANSMIT OPERATIONS.

                                     07FD  1306 ; THE FORK BLOCK USED IS THE I/O PACKET.

                                     07FD  1307 ;

                                     07FD  1308 ; INPUTS:

                                     07FD  1309 ;

                                     07FD  1310 ;	R3,R4 CONTAIN IRP DATA

                                     07FD  1311 ;	R5 = ADDRESS OF THE FORKBLOCK - I/O PACKET

                                     07FD  1312 ;

                                     07FD  1313 ; OUTPUTS:

                                     07FD  1314 ;

                                     07FD  1315 ;	THE REQUEST IS COMPLETED VIA REQCOM.

                                     07FD  1316 ;--

                                     07FD  1317 XMITDONEFORK:				; TRANSMIT DONE FORK

         10 A5            53     7D  07FD  1318 	MOVQ	R3,IRP$L_AST(R5)	; SAVE FORK DATA

            53            55     D0  0801  1319 	MOVL	R5,R3			; COPY BLOCK ADDRESS

         0B A3         38 A3     90  0804  1320 	MOVB	IRP$L_MEDIA+4(R3),IRP$B_RMOD(R3); RESTORE MODE

         0C A3         34 A3     D0  0809  1321 	MOVL	IRP$L_MEDIA(R3),IRP$L_PID(R3); RESTORE PID

            55         1C A3     D0  080E  1322 	MOVL	IRP$L_UCB(R3),R5	; GET UCB FOR UNIT

         6C A5       0000'8F     B0  0812  1323 	MOVW	#SS$_NORMAL,UCB$W_BOFF(R5); SET STATUS

         6E A5       C000 8F     AA  0818  1324 	BICW	#^X0C000,UCB$W_BCNT(R5); SET UP TRANSFER SIZE

                          06     12  081E  1325 	BNEQ	10$			; IF NEQ THEN NO ERROR

         6C A5       0000'8F     B0  0820  1326 	MOVW	#SS$_CTRLERR,UCB$W_BOFF(R5); SET DATA PATH ERROR

                 00000000'GF     16  0826  1327 10$:	JSB	G^IOC$RELMAPREG		; RELEASE MAP REGISTER

                 00000000'GF     16  082C  1328 	JSB	G^IOC$RELDATAP		; RELEASE THE DATA PATH

                                     0832  1329 ;

                                     0832  1330 ; COMPLETE START,STOP, CHANGE MODE AND XMIT I/O OPERATIONS

                                     0832  1331 ;

                                     0832  1332 BUSY_IO_DONE:				;

                 00000000'GF     16  0832  1333 	JSB	G^IOC$DIAGBUFILL

            50         6C A5     D0  0838  1334 	MOVL	UCB$W_BOFF(R5),R0	; GET TRANSFER SIZE AND STATUS

            51         3C A5     D0  083C  1335 	MOVL	UCB$L_DEVDEPEND(R5),R1	;

                                     0840  1336 	REQCOM				; COMPLETE AND START NEXT

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  35

V06             REGDUMP - DMC-11 ERROR LOG AND DIAGNOSTICS REGI                                                                 (22)



                                     0846  1338 	.SBTTL	REGDUMP - DMC-11 ERROR LOG AND DIAGNOSTICS REGISTER DUMP

                                     0846  1339 ;++

                                     0846  1340 ; REGDUMP - ERROR LOG AND DIAGNOSTICS REGISTER DUMP ROUTINE

                                     0846  1341 ;

                                     0846  1342 ; FUNCTIONAL DESCRIPTION:

                                     0846  1343 ;

                                     0846  1344 ; THIS ROUTINE IS USED TO RETURN THE DMC-11 ERROR LOG AND DIAGNOSTICS

                                     0846  1345 ; BUFFER ON ERROR OR DIAGNOSTIC QIO FUNCTION.

                                     0846  1346 ;

                                     0846  1347 ; INPUTS:

                                     0846  1348 ;

                                     0846  1349 ;	R0 = ADDRESS OF THE BUFFER

                                     0846  1350 ;	R5 = UCB ADDRESS OF THE UNIT

                                     0846  1351 ;

                                     0846  1352 ; OUTPUTS:

                                     0846  1353 ;

                                     0846  1354 ;	R0,R1 ARE USED

                                     0846  1355 ;	R5 = UCB ADDRESS OF THE UNIT

                                     0846  1356 ;--

                                     0846  1357 REGDUMP:

            80            08     9A  0846  1358 	MOVZBL	#8,(R0)+		; INSERT NUMBER OF RETURNED LONG WORDS

            80       00B0 C5     D0  0849  1359 	MOVL	UCB$L_XM_LSTCSR(R5),(R0)+; INSERT LAST CSR

            80       00AC C5     D0  084E  1360 	MOVL	UCB$L_XM_LSTPRT(R5),(R0)+; INSERT LAST PORT

         3C A5            0B     E1  0853  1361 	BBC	#XM$V_STS_ACTIVE,UCB$L_DEVDEPEND(R5),20$; BR IF NOT ACTIVE

                          0F         0857       

            51       00B4 C5     D0  0858  1362 	MOVL	UCB$L_XM_BASAD(R5),R1	; ADDRESS UNIT BASE TABLE

            80         03 A1     D0  085D  1363 	MOVL	3(R1),(R0)+		; RETURN 8 BYTES OF ERROR COUNTERS

            80         07 A1     D0  0861  1364 	MOVL	7(R1),(R0)+		;

                          02     11  0865  1365 	BRB	30$			; CONTINUE

                          80     7C  0867  1366 20$:	CLRQ	(R0)+			; RETURN NO ERRORS

                          80     7C  0869  1367 30$:	CLRQ	(R0)+			;

                          60     7C  086B  1368 	CLRQ	(R0)			;

                                 05  086D  1369 	RSB

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  36

V06             POKE_USER - POKE USER PROCESS ON ATTENTION COND                                                                 (23)



                                     086E  1371 	.SBTTL	POKE_USER - POKE USER PROCESS ON ATTENTION CONDITION

                                     086E  1372 ;++

                                     086E  1373 ; POKE_USER - POKE USER PROCESS ON ATTENTION CONDITION

                                     086E  1374 ;

                                     086E  1375 ; FUNCTIONAL DESCRIPTION:

                                     086E  1376 ;

                                     086E  1377 ; THIS ROUTINE IS USED WHEN DATA IS AVALIABLE OR THE UNIT IS SHUTDOWN.

                                     086E  1378 ; THE ACTION IS TO DECLARE THE AST'S AND SEND A MESSAGE TO THE ASSOC. MAOLBOX.

                                     086E  1379 ;

                                     086E  1380 ; INPUTS:

                                     086E  1381 ;

                                     086E  1382 ;	R4 = MESSAGE TYPE -- 0 IF NO MESSAGE

                                     086E  1383 ;	R5 = UNIT UCB ADDRESS

                                     086E  1384 ;

                                     086E  1385 ; OUTPUTS:

                                     086E  1386 ;

                                     086E  1387 ;	R0 = STATUS OF MAILBOX SEND

                                     086E  1388 ;	R5 = UCB ADDRESS

                                     086E  1389 ;--

                                     086E  1390 POKE_USER:				; POKE USER

                          54     DD  086E  1391 	PUSHL	R4			; SAVE MESSAGE TYPE

            51       00B8 C5     9E  0870  1392 	MOVAB	UCB$L_XM_AST(R5),R1	; ADDRESS AST LIST

            54            51     D0  0875  1393 	MOVL	R1,R4			; COPY LIST HEAD ADDRESS

            51            61     D0  0878  1394 10$:	MOVL	(R1),R1			; ADDRESS A BLOCK

                          07     13  087B  1395 	BEQL	15$			; IF EQL THEN DONE

         1C A1         3C A5     D0  087D  1396 	MOVL	UCB$L_DEVDEPEND(R5),^X01C(R1); CHANGE PARAM

                          F4     11  0882  1397 	BRB	10$

                 00000000'GF     16  0884  1398 15$:	JSB	G^COM$DELATTNAST		; DELIVER AST'S

            50       0000'8F     3C  088A  1399 	MOVZWL	#SS$_NORMAL,R0		; ASSUME NORMAL SEND

                          54   8ED0  088F  1400 	POPL	R4			; GET MESSAGE TYPE BACK

                          11     13  0892  1401 	BEQL	20$			; IF EQL THEN NO MESSAGE

            53         54 A5     D0  0894  1402 	MOVL	UCB$L_AMB(R5),R3	; GET MAILBOX UCB ADDRESS

                          0B     13  0898  1403 	BEQL	20$			; IF EQL THEN NONE

         3C A5            04     E1  089A  1404 	BBC	#XM$V_CHR_MBX,UCB$L_DEVDEPEND(R5),20$; BR IF NOT ENABLED

                          06         089E       

                 00000000'GF     17  089F  1405 	JMP	G^EXE$SNDEVMSG		; SEND THE MESSAGE

                                 05  08A5  1406 20$:	RSB				; DONE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  37

V06             TIMEOUT - TIMEOUT                                                                                               (24)



                                     08A6  1408 	.SBTTL	TIMEOUT - TIMEOUT 

                                     08A6  1409 ;++

                                     08A6  1410 ; TIMEOUT - TIMEOUT 

                                     08A6  1411 ;

                                     08A6  1412 ; FUNCTIONAL DESCRIPTION:

                                     08A6  1413 ;

                                     08A6  1414 ; THIS ROUTINE IS ENTERED ON DEVICE TIMEOUT. THE ACTION IS TO

                                     08A6  1415 ; SHUT THE UNIT DOWN.

                                     08A6  1416 ;

                                     08A6  1417 ; INPUTS:

                                     08A6  1418 ;

                                     08A6  1419 ;	R5 = UCB ADDRESS

                                     08A6  1420 ;

                                     08A6  1421 ; OUTPUTS:

                                     08A6  1422 ;

                                     08A6  1423 ;	NONE

                                     08A6  1424 ;--

                               0002' 08A6  1425 	.WORD	TIMEOUT-.

                                     08A8  1426 TIMEOUT:				; TIMEOUT OR POWERFAIL

   00000800 8F            10     78  08A8  1427 	ASHL	#16,#XM_E_M_TIMEOUT,UCB$L_XM_LSTPRT(R5); SAVE AS ERROR PORT

                     00AC C5         08AF       

         58 A5            05     E1  08B2  1428 	BBC	#UCB$V_POWER,UCB$W_STS(R5),10$; BR IF NOT POWERFAIL

                          0A         08B6       

   00000400 8F            10     78  08B7  1429 	ASHL	#16,#XM_E_M_POWER,UCB$L_XM_LSTPRT(R5);

                     00AC C5         08BE       

         3C A5            0B     E0  08C1  1430 10$:	BBS	#XM$V_STS_ACTIVE,UCB$L_DEVDEPEND(R5),ERROR; BR IF UNIT IS ACTIVE

                          06         08C5       

                                 05  08C6  1431 	RSB				; ELSE DONE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  38

V06             ERRORFORK - ERROR FORK  RPOCESS                                                                                 (25)



                                     08C7  1433 	.SBTTL	ERRORFORK - ERROR FORK  RPOCESS

                                     08C7  1434 ;++

                                     08C7  1435 ; ERRORFORK - ERROR PROCESSING FORK

                                     08C7  1436 ;

                                     08C7  1437 ; FUNCTIONAL DESCRIPTION:

                                     08C7  1438 ;

                                     08C7  1439 ; THIS IS THE FORK PROCESS THAT HANDLES ERRORS ON THE DMC UNIT.

                                     08C7  1440 ; THE ACTION IS TO SIGNAL THE OWNER PROCESS VIA MAILBOX OR AST OF THE 

                                     08C7  1441 ; ATTENTION CONDITION. AND THEN, IF THE ERROR IS FATAL, SHUT DOWN THE UNIT.

                                     08C7  1442 ; 

                                     08C7  1443 ;

                                     08C7  1444 ; INPUTS:

                                     08C7  1445 ;

                                     08C7  1446 ;	R3 = PRE FORT PORT VALUE

                                     08C7  1447 ;	R4 = PRE FORK CSR VALUE

                                     08C7  1448 ;	R5 = ADDRESS OF THE UCB FORK BLOCK

                                     08C7  1449 ;

                                     08C7  1450 ; OUTPUTS:

                                     08C7  1451 ;

                                     08C7  1452 ;	NONE

                                     08C7  1453 ;--

                                     08C7  1454 ERRORFORK:				; ERROR PROCESSING FORK

            55       FF64 C5     9E  08C7  1455 	MOVAB	-UCB$L_XM_ERRFKB(R5),R5	; ADDRESS UCB

                                     08CC  1456 ERROR:

                       72 A5     B6  08CC  1457 	INCW	UCB$W_ERRCNT(R5)	; ADJUST COUNT

       00AE C5       0F98 8F     B3  08CF  1458 	BITW	#<XM_E_M_PROCERR!-	; FATAL ERROR?

                                     08D6  1459 		XM_E_M_NONEXMEM!-

                                     08D6  1460 		XM_E_M_START!-

                                     08D6  1461 		XM_E_M_LOST!-

                                     08D6  1462 		XM_E_M_POWER!-

                                     08D6  1463 		XM_E_M_TIMEOUT!-

                                     08D6  1464 		XM_E_M_MOP>,UCB$L_XM_LSTPRT+2(R5)

                          1D     12  08D6  1465 	BNEQ	20$			; IF NEQ THEN YES

         3D A5       00AE C5     88  08D8  1466 	BISB	UCB$L_XM_LSTPRT+2(R5),UCB$L_DEVDEPEND+1(R5); SAVE DATA

                          06     10  08DE  1467 	BSBB	15$			; FREE PORT

            54            0D     9A  08E0  1468 	MOVZBL	#MSG$_XM_ATTN,R4	; SET MESSAGE TYPE

                          FF88   31  08E3  1469 	BRW	POKE_USER		; TELL THE OWNER

                                     08E6  1470 ;

                                     08E6  1471 ; FREE CONTROL PORT

                                     08E6  1472 ;

                                     08E6  1473 15$:

            50         20 A5     D0  08E6  1474 	MOVL	UCB$L_CRB(R5),R0	; FIND CSR

            50         1C B0     D0  08EA  1475 	MOVL	@CRB$L_INTD+VEC$L_IDB(R0),R0;

         02 A0       0080 8F     AA  08EE  1476 	BICW	#XM_O_M_READY,XM_O_CSR(R0); FREE PORT ON ERROR

                                 05  08F4  1477 	RSB

                                     08F5  1478 ;

                                     08F5  1479 ; FATAL ERROR

                                     08F5  1480 ;

         3C A5       0800 8F     AA  08F5  1481 20$:	BICW	#XM$M_STS_ACTIVE,UCB$L_DEVDEPEND(R5); CLEAR ACTIVE

       00AE C5       FF67 8F     AB  08FB  1482 	BICW3	#^C<XM_E_M_MOP!-

                       3E A5         0902       

                                     0904  1483 			XM_E_M_LOST!-

                                     0904  1484 			XM_E_M_START>,UCB$L_XM_LSTPRT+2(R5),UCB$L_DEVDEPEND+2(R5)

       00AE C5            09     E0  0904  1485 	BBS	#XM_E_V_PROCERR,UCB$L_XM_LSTPRT+2(R5),40$; BR IF PROCEEDURE

                          0A         0909       

         3E A5            01     A8  090A  1486 	BISW	#XM$M_ERR_FATAL@-16,UCB$L_DEVDEPEND+2(R5)

            54            0C     9A  090E  1487 30$:	MOVZBL	#MSG$_XM_SHUTDN,R4	; SEND MESSAGE

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  39

V06             ERRORFORK - ERROR FORK  RPOCESS                                                                                 (25)



                          FF5A   30  0911  1488 	BSBW	POKE_USER		; TELL OWNER

                          D0     10  0914  1489 40$:	BSBB	15$			; FREE PORT

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  40

V06             SHUTDOWN - SHUT DOWN UNIT                                                                                       (26)



                                     0916  1491 	.SBTTL SHUTDOWN - SHUT DOWN UNIT 

                                     0916  1492 ;++

                                     0916  1493 ; SHUTDOWN - SHUT DOWN UNIT

                                     0916  1494 ;

                                     0916  1495 ; FUNCTIONAL DESCRIPTION:

                                     0916  1496 ;

                                     0916  1497 ; THIS ROUTINE IS USED TO SHUT DOWN THE DMC UNIT AS A RESULT OF A SETMODE AND STOP

                                     0916  1498 ; PROTOCOL OR FATAL ERROR. THE ACTION IS TO PERFORM A CACNEL I/O AND THEN TO

                                     0916  1499 ; CLEAN UP THE UNIT DATA BASE.

                                     0916  1500 ;

                                     0916  1501 ; INPUTS:

                                     0916  1502 ;

                                     0916  1503 ;	R5 = UCB ADDRESS

                                     0916  1504 ;

                                     0916  1505 ; OUTPUTS:

                                     0916  1506 ;

                                     0916  1507 ;	R5 = UCB ADDRESS

                                     0916  1508 ;

                                     0916  1509 ;	R0-R4 ARE DISTROYED.

                                     0916  1510 ;--

                                     0916  1511 SHUTDOWN:				; SHUT DOWN UNIT

         58 A5            04     E1  0916  1512 	BBC	#UCB$V_ONLINE,UCB$W_STS(R5),10$; BR IF NOT ONLINE

                          2B         091A       

         5A A5            0A     E1  091B  1513 	BBC	#XM_DS_V_INITED,UCB$W_DEVSTS(R5),10$; BR IF NEVER INITED

                          26         091F       

            54         20 A5     D0  0920  1514 	MOVL	UCB$L_CRB(R5),R4	; GET UNIT CSR

            54         1C B4     D0  0924  1515 	MOVL	@CRB$L_INTD+VEC$L_IDB(R4),R4;

                                     0928  1516 	DSBINT	UCB$B_DIPL(R5)		; RAISE TO DEVICE IPL FOR MASTER CLEAR

         58 A5            23     AA  092F  1517 	BICW	#UCB$M_INT!UCB$M_POWER!UCB$M_TIM,UCB$W_STS(R5); RESET DEVICE STATUS

         3C A5       0800 8F     AA  0933  1518 	BICW	#XM$M_STS_ACTIVE,UCB$L_DEVDEPEND(R5); SET INACTIVE

                       5A A5     B4  0939  1519 	CLRW	UCB$W_DEVSTS(R5)	; CLEAR PORT REQUEST BITS

            64       4000 8F     B0  093C  1520 	MOVW	#XM_I_M_MASTCLR,(R4)	; MASTER CLEAR THE UNIT

                                     0941  1521 	ENBINT				; RETURN TO FORK LEVEL

                          01     11  0944  1522 	BRB	20$			; CONTINUE TURN OFF

                                 05  0946  1523 10$:	RSB				; RETURN TO CALLER

                     00C0 8F     BB  0947  1524 20$:	PUSHR	#^M<R6,R7>		;

            57       00B8 C5     9E  094B  1525 25$:	MOVAB	UCB$L_XM_AST(R5),R7	; ADDRESS LIST HEAD FOR AST'S

            50            67     D0  0950  1526 	MOVL	(R7),R0			; ANYTHING IN THE LIST?

                          1B     13  0953  1527 	BEQL	29$			; IF EQL THEN ENPTY

            56         22 A0     3C  0955  1528 	MOVZWL	ACB$L_KAST+10(R0),R6	; FORCE CHANNEL

            52         24 A0     3C  0959  1529 	MOVZWL	ACB$L_KAST+12(R0),R2	; GET PID INDEX

            54   00000000'GF     D0  095D  1530 	MOVL	G^SCH$GL_PCBVEC,R4	;

            54            6442   D0  0964  1531 	MOVL	(R4)[R2],R4		; GET PCB

                 00000000'GF     16  0968  1532 	JSB	G^COM$FLUSHATTNS	; FLUSH THE ATTENTION AST'S

                          DB     11  096E  1533 	BRB	25$			; CONTINUE UNTIL DONE

                     00C0 8F     BA  0970  1534 29$:	POPR	#^M<R6,R7>		; RESTORE REGISTER

            50       00B4 C5     D0  0974  1535 	MOVL	UCB$L_XM_BASAD(R5),R0	; ADDRESS THE BASE TABLE 

                          12     13  0979  1536 	BEQL	30$			; IF EQL THEN DONE

         08 A0       0100 8F     3C  097B  1537 	MOVZWL	#256,8(R0)		; MAKE IT A REAL MEMORY BLOCK

       00A4 C5         08 A0     A0  0981  1538 	ADDW	8(R0),UCB$W_XM_QUOTA(R5); ADJUST QUOTA

                 00000000'GF     16  0987  1539 	JSB	G^COM$DRVDEALMEM	; DEALLOCATE IT

            54         20 A5     D0  098D  1540 30$:	MOVL	UCB$L_CRB(R5),R4	; ADDRESS CRB

         10 A5         24 A4     D0  0991  1541 	MOVL	CRB$L_INTD+VEC$W_MAPREG(R4),UCB$L_FR3(R5); SAVE MAP AND DP DATA

            51         3A A5     3C  0996  1542 	MOVZWL	UCB$W_DEVBUFSIZ(R5),R1	; CALC NUMBER OF MAPS ALLOCATED

            51   000005FE 8F     C0  099A  1543 	ADDL	#^X01FF+^X03FF,R1	;

            51         F7 8F     78  09A1  1544 	ASHL	#-9,R1,R1		;

                          51         09A5       

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  41

V06             SHUTDOWN - SHUT DOWN UNIT                                                                                       (26)



         26 A4            51     90  09A6  1545 	MOVB	R1,CRB$L_INTD+VEC$B_NUMREG(R4);

         24 A4       008E C5     B0  09AA  1546 	MOVW	UCB$Q_XM_CURCV1+2(R5),CRB$L_INTD+VEC$W_MAPREG(R4); DEALLOCATE THE MAP REGISTER

                          06     19  09B0  1547 	BLSS	55$			; IF LSS THEN DONE

                 00000000'GF     16  09B2  1548 	JSB	G^IOC$RELMAPREG		;

            51       008C C5     90  09B8  1549 55$:	MOVB	UCB$Q_XM_CURCV1(R5),R1	; SET DATA PATH NUMBER

                          0D     13  09BD  1550 	BEQL	60$			; IF EQL THEN DONE

         27 A4            51     90  09BF  1551 	MOVB	R1,CRB$L_INTD+VEC$B_DATAPATH(R4); SAVE IT

                          FD89   30  09C3  1552 	BSBW	PURGE_DATAPATH		; PURGE THE PATH

                 00000000'GF     16  09C6  1553 	JSB	G^IOC$RELDATAP		; RELEASE IT

         24 A4       0096 C5     B0  09CC  1554 60$:	MOVW	UCB$Q_XM_CURCV2+2(R5),CRB$L_INTD+VEC$W_MAPREG(R4); DEALLOCATE THE MAP REGI

                          06     19  09D2  1555 	BLSS	65$			; IF LSS THEN DONE

                 00000000'GF     16  09D4  1556 	JSB	G^IOC$RELMAPREG		;

            51       0094 C5     90  09DA  1557 65$:	MOVB	UCB$Q_XM_CURCV2(R5),R1	; SET DATA PATH NUMBER

                          0D     13  09DF  1558 	BEQL	70$			; IF EQL THEN DONE

         27 A4            51     90  09E1  1559 	MOVB	R1,CRB$L_INTD+VEC$B_DATAPATH(R4); SAVE IT

                          FD67   30  09E5  1560 	BSBW	PURGE_DATAPATH		; PURGE THE PATH

                 00000000'GF     16  09E8  1561 	JSB	G^IOC$RELDATAP		; RELEASE IT

         24 A4       00BC C5     B0  09EE  1562 70$:	MOVW	UCB$W_XM_BASMP(R5),CRB$L_INTD+VEC$W_MAPREG(R4)

                          0A     19  09F4  1563 	BLSS	80$			; IF LSS THEN DONE

         26 A4            03     90  09F6  1564 	MOVB	#3,CRB$L_INTD+VEC$B_NUMREG(R4); SET NUMBER OF MAP REGS

                 00000000'GF     16  09FA  1565 	JSB	G^IOC$RELMAPREG

         24 A4         10 A5     D0  0A00  1566 80$:	MOVL	UCB$L_FR3(R5),CRB$L_INTD+VEC$W_MAPREG(R4); RESTORE MAP AND DP DATA

       008D C5            03     93  0A05  1567 	BITB	#XM_RCV_M_INPR!XM_RCV_M_INUS,UCB$Q_XM_CURCV1+1(R5); 

                          07     13  0A0A  1568 	BEQL	85$			; IF EQL THEN NOT IN USE

       0084 C5       0090 D5     0E  0A0C  1569 	INSQUE	@UCB$Q_XM_CURCV1+4(R5),UCB$Q_XM_FREE(R5)

                                     0A13  1570 85$:

       0095 C5            03     93  0A13  1571 	BITB	#XM_RCV_M_INPR!XM_RCV_M_INUS,UCB$Q_XM_CURCV2+1(R5); 

                          07     13  0A18  1572 	BEQL	90$			; IF EQL THEN NOT IN USE

       0084 C5       0098 D5     0E  0A1A  1573 	INSQUE	@UCB$Q_XM_CURCV2+4(R5),UCB$Q_XM_FREE(R5)

            50       0084 D5     0F  0A21  1574 90$:	REMQUE	@UCB$Q_XM_FREE(R5),R0	; DEALLOCATE THE FREE LIST

                          0E     1D  0A26  1575 	BVS	100$			; IF V-SET THEN NONE

       00A4 C5         08 A0     A0  0A28  1576 	ADDW	8(R0),UCB$W_XM_QUOTA(R5); ADJUST QUOTA

                 00000000'GF     16  0A2E  1577 	JSB	G^COM$DRVDEALMEM		; DEALLOCATE THE BLOCK

                          EB     11  0A34  1578 	BRB	90$			; CONTINUE UNTIL DONE

            50       00C0 C5     3C  0A36  1579 100$:	MOVZWL	UCB$L_XM_PID(R5),R0	; GET PID OF LAST STARTER

            51   00000000'GF     D0  0A3B  1580 	MOVL	G^SCH$GL_PCBVEC,R1	; ADDRESS PCB VECTOR

            50            6140   D0  0A42  1581 	MOVL	(R1)[R0],R0		; GET PCB OF OWNER

       00C0 C5         60 A0     D1  0A46  1582 	CMPL	PCB$L_PID(R0),UCB$L_XM_PID(R5); STILL THERE?

                          06     12  0A4C  1583 	BNEQ	110$			; IF NOT THEN BR

         42 A0       00A4 C5     A0  0A4E  1584 	ADDW	UCB$W_XM_QUOTA(R5),PCB$W_BYTCNT(R0); RETURN QUOTA

                          52     D4  0A54  1585 110$:	CLRL	R2			; SET TO CANCEL ALL THE I/O

                          13     11  0A56  1586 	BRB	CANCELIO		; CANCEL ALL

                                     0A58  1587 	

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  42

V06             CANCELIO - CANCEL I/O ON UNIT, INTERNAL AND EXT                                                                 (27)



                                     0A58  1589 	.SBTTL	CANCELIO - CANCEL I/O ON UNIT, INTERNAL AND EXTERNAL

                                     0A58  1590 ;++

                                     0A58  1591 ; CANCELIO - CANCEL I/O ON UNIT, INTERNAL

                                     0A58  1592 ; EXT_CANCELIO - CANCEL I/O ON UNIT, EXTERNAL

                                     0A58  1593 ;

                                     0A58  1594 ; FUNCTIONAL DESCRIPTION:

                                     0A58  1595 ;

                                     0A58  1596 ; THIS ROUTINE IS USED TO CANCEL SPECIFIC OR ALL I/O PENDING ON A DMC UNIT.

                                     0A58  1597 ;

                                     0A58  1598 ; INPUTS:

                                     0A58  1599 ;

                                     0A58  1600 ;	R2 = CHANNEL NUMBER OR 0 IF CANCEL ALL

                                     0A58  1601 ;	R3 = CURRENT I/O PACKET IF BUSY

                                     0A58  1602 ;	R4 = PCB ADDRESS IF SPECIFIC CANCEL

                                     0A58  1603 ;	R5 = UCB ADDRESS

                                     0A58  1604 ;

                                     0A58  1605 ; OUTPUTS:

                                     0A58  1606 ;

                                     0A58  1607 ;	R2,R3,R4,R5 ARE SAVED

                                     0A58  1608 ;

                                     0A58  1609 ;--

                                     0A58  1610 EXT_CANCELIO:				; EXTERNAL CANCEL I/O

         5A A5            0A     E1  0A58  1611 	BBC	#XM_DS_V_INITED,UCB$W_DEVSTS(R5),10$; BR IF NOT INITED

                          0D         0A5C       

                       50 A5     B5  0A5D  1612 	TSTW	UCB$W_REFC(R5)		; REF COUNT 0?

                          09     12  0A60  1613 	BNEQ	CANCELIO		; IF NEQ THEN STILL ACTIVE

                          54     DD  0A62  1614 	PUSHL	R4

                          FEAF   30  0A64  1615 	BSBW	SHUTDOWN		; OTHERWISE SHUT THE UNIT DOWN

                          54   8ED0  0A67  1616 	POPL	R4			;

                                 05  0A6A  1617 10$:	RSB

                                     0A6B  1618 CANCELIO:				; CANCEL I/O

                          54     DD  0A6B  1619 	PUSHL	R4

                                     0A6D  1620 ;

                                     0A6D  1621 ; COMPLETE ALL ASSOCIATED RECEIVE PACKETS

                                     0A6D  1622 ;

            51         7C A5     9E  0A6D  1623 5$:	MOVAB	UCB$Q_XM_RCVS(R5),R1	; ADDRESS WAITING RECEIVE LISTHEAD

            53            61     D0  0A71  1624 	MOVL	(R1),R3			; GET LIST ENTRY

            51            53     D1  0A74  1625 10$:	CMPL	R3,R1			; LIST END?

                          16     13  0A77  1626 	BEQL	20$			; IF EQL THEN YES

                          78     10  0A79  1627 	BSBB	CHECKPKT		; CANCEL IF MATCH

                          0D     12  0A7B  1628 	BNEQ	15$			; IF NEQ THEN NO MATCH

            53            63     0F  0A7D  1629 	REMQUE	(R3),R3			; REMOVE ENTRY FROM LIST

            50       0000'8F     3C  0A80  1630 	MOVZWL	#SS$_ABORT,R0		; SET STATUS AND SIZE

                          FD4F   30  0A85  1631 	BSBW	RCV_IO_DONE		; COMPLETE THE RECEIVE IN ERROR

                          E3     11  0A88  1632 	BRB	5$			; CONTINUE

            53            63     D0  0A8A  1633 15$:	MOVL	(R3),R3			; TRAVEL LINK

                          E5     11  0A8D  1634 	BRB	10$			

                                     0A8F  1635 ;

                                     0A8F  1636 ; COMPLETE THE CURRENT XMIT OR STOP I/O

                                     0A8F  1637 ;

            54            6E     D0  0A8F  1638 20$:	MOVL	(SP),R4			; RESTORE PCB

                                     0A92  1639 	DSBINT	UCB$B_DIPL(R5)		; LOCK OUT INTERRUPTS

         58 A5            08     E1  0A99  1640 	BBC	#UCB$V_BSY,UCB$W_STS(R5),40$; BR IF NOT BUSY

                          4E         0A9D       

            53         4C A5     D0  0A9E  1641 	MOVL	UCB$L_IRP(R5),R3	; GET THE CURRENT PACKET ADDRESS

                          4F     10  0AA2  1642 	BSBB	CHECKPKT		; SEE IF PACKET SHOULD BE CANCELED AND CANCEL

                          46     12  0AA4  1643 	BNEQ	40$			; IF NEQ THEN NO MATCH

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  43

V06             CANCELIO - CANCEL I/O ON UNIT, INTERNAL AND EXT                                                                 (27)



         5A A5       0300 8F     AA  0AA6  1644 	BICW	#XM_DS_M_XMTPND!XM_DS_M_XMTINP,UCB$W_DEVSTS(R5); SET NO XMIT TO DO

                                     0AAC  1645 	ENBINT				; RESET INTERRUPTS

         6C A5       0000'8F     3C  0AAF  1646 	MOVZWL	#SS$_NORMAL,UCB$W_BOFF(R5); ASSUME SHUTDOWN

         20 A3         FC 8F     8B  0AB5  1647 	BICB3	#^X0FC,IRP$W_FUNC(R3),R0 ; CASE ON FUNCTION TYPE

                          50         0ABA       

                          0B     13  0ABB  1648 	BEQL	25$			; IF EQL THEN XMIT

            25            50     E9  0ABD  1649 	BLBC	R0,30$			; IF LOW CLEAR THEN STOP

         6C A5       0000'8F     3C  0AC0  1650 	MOVZWL	#SS$_CTRLERR,UCB$W_BOFF(R5); SET START UP ERROR

                          1D     11  0AC6  1651 	BRB	30$			; CONTINUE

         6C A5       0000'8F     3C  0AC8  1652 25$:	MOVZWL	#SS$_ABORT,UCB$W_BOFF(R5); SET ABORTED STATUS

                 00000000'GF     16  0ACE  1653 	JSB	G^IOC$RELMAPREG		; RELEASE MAP REGISTERS

            50         20 A5     D0  0AD4  1654 	MOVL	UCB$L_CRB(R5),R0	; GET THE CRB

            51         27 A0     9A  0AD8  1655 	MOVZBL	CRB$L_INTD+VEC$B_DATAPATH(R0),R1; PURGE THE DATA PATH

                          FC70   30  0ADC  1656 	BSBW	PURGE_DATAPATH		;

                 00000000'GF     16  0ADF  1657 	JSB	G^IOC$RELDATAP		; RELEASE THE XMIT DATA PATH

                          FD4A   30  0AE5  1658 30$:	BSBW	BUSY_IO_DONE		; COMPLETE THE I/O

                          54   8ED0  0AE8  1659 	POPL	R4			; RESTORE PCB ADDRESS

                                 05  0AEB  1660 	RSB

                                     0AEC  1661 40$:	ENBINT				; RESET INTERRUPTS

                          54   8ED0  0AEF  1662 	POPL	R4			; RESTORE PCB

                                 05  0AF2  1663 	RSB

                                     0AF3  1664 ;

                                     0AF3  1665 ; SUBROUTINE TO CHECK FOR SPECIFIC CANCEL

                                     0AF3  1666 ;

                                     0AF3  1667 CHECKPKT:

                          52     D5  0AF3  1668 	TSTL	R2			; ALL?

                          0B     13  0AF5  1669 	BEQL	30$			; IF EQL THEN YES - CANCEL

         0C A3         60 A4     D1  0AF7  1670 	CMPL	PCB$L_PID(R4),IRP$L_PID(R3); PID MATCH?

                          04     12  0AFC  1671 	BNEQ	30$			; IF NEQ THEN NO

         28 A3            52     B1  0AFE  1672 	CMPW	R2,IRP$W_CHAN(R3)	; CHANNEL MATCH?

                                 05  0B02  1673 30$:	RSB				; RETURN TO CALLER

                                     0B03  1674 ;

                                     0B03  1675 XM_END:

                                     0B03  1676 	.END

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  44

SYMBOL TABLE                                                                                                                    (27)



$$OP           = 00000002            DDB$W_SIZE       00000008            IO$M_FCODE     = 0000003F            

ACB$B_RMOD       0000000B            DEV$M_IDV        ********   X   03   IO$M_HANGUP    = 00000200            

ACB$B_TYPE       0000000A            DEV$M_NET        ********   X   03   IO$M_INHERLOG  = 00000800            

ACB$L_AST        00000010            DEV$M_ODV        ********   X   03   IO$M_INHEXTGAP = 00001000            

ACB$L_ASTPRM     00000014            DPT$INITAB       0000001F R     03   IO$M_INHRETRY  = 00008000            

ACB$L_ASTQBL     00000004            DPT$REINITAB     00000037 R     03   IO$M_INHSEEK   = 00001000            

ACB$L_ASTQFL     00000000            DPT$TAB          00000000 R     03   IO$M_INTERRUPT = 00000040            

ACB$L_KAST       00000018            DYN$C_CRB        ********   X   03   IO$M_INTSKIP   = 00000100            

ACB$L_PID        0000000C            DYN$C_DDB        ********   X   03   IO$M_MOUNT     = 00000200            

ACB$M_QUOTA    = 00000040            DYN$C_DPT        ********   X   03   IO$M_NOECHO    = 00000040            

ACB$S_MODE     = 00000002            DYN$C_NET        ********   X   04   IO$M_NOFILTR   = 00000200            

ACB$V_KAST     = 00000007            DYN$C_UCB        ********   X   03   IO$M_NOFORMAT  = 00000100            

ACB$V_MODE     = 00000000            ERROR            000008CC R     04   IO$M_NOW       = 00000040            

ACB$V_QUOTA    = 00000006            ERRORFORK        000008C7 R     04   IO$M_NOWAIT    = 00000080            

ACB$W_SIZE       00000008            EXE$ABORTIO      ********   X   04   IO$M_PACKED    = 00000080            

ACP_RECEIVE      0000047D R     04   EXE$ALLOCBUF     ********   X   04   IO$M_PURGE     = 00000800            

AT$_UBA          ********   X   03   EXE$ALONONPAGED  ********   X   04   IO$M_READATTN  = 00000080            

AWAIT_UNIT       0000043E R     04   EXE$BUFQUOPRC    ********   X   04   IO$M_REVERSE   = 00000040            

BIT...         = 0000000C            EXE$FINISHIO     ********   X   04   IO$M_SHUTDOWN  = 00000080            

BUSY_IO_DONE     00000832 R     04   EXE$FORK         ********   X   04   IO$M_STARTUP   = 00000040            

CANCELIO         00000A6B R     04   EXE$GL_ABSTIM    ********   X   04   IO$M_SYNCH     = 00000200            

CHANGE_MODE      0000045D R     04   EXE$GQ_SYSTIME   ********   X   04   IO$M_TIMED     = 00000080            

CHECKPKT         00000AF3 R     04   EXE$QIODRVPKT    ********   X   04   IO$M_TRMNOECHO = 00001000            

COM$DELATTNAST   ********   X   04   EXE$QIORETURN    ********   X   04   IO$M_WRTATTN   = 00000100            

COM$DRVDEALMEM   ********   X   04   EXE$READCHK      ********   X   04   IO$S_FCODE     = 00000006            

COM$FLUSHATTNS   ********   X   04   EXE$SNDEVMSG     ********   X   04   IO$V_ABORT     = 00000008            

COM$POST         ********   X   04   EXE$WRITE        ********   X   04   IO$V_ACCESS    = 00000006            

COM$SETATTNAST   ********   X   04   EXT_CANCELIO     00000A58 R     04   IO$V_ATTNAST   = 00000008            

CONTROL_INIT     0000004C R     04   FILLFREELIST     000004B0 R     04   IO$V_BINARY    = 00000006            

CONTROL_INTR     0000065F R     04   FINISH_RCV_IO    00000798 R     04   IO$V_CANCTRLO  = 00000006            

CRB$B_MASK       0000000E            FUNCTABLE        00000018 R     04   IO$V_COMMOD    = 00000006            

CRB$B_TT_ATTN    00000004            GBL...         = 00000000            IO$V_CREATE    = 00000007            

CRB$B_TT_EXPEC   00000005            IDB$B_TYPE       0000000A            IO$V_CTRLCAST  = 00000008            

CRB$B_TYPE       0000000A            IDB$B_UNITS      0000000B            IO$V_CTRLYAST  = 00000007            

CRB$C_LENGTH     00000038            IDB$C_LENGTH     00000030            IO$V_CVTLOW    = 00000008            

CRB$K_LENGTH     00000038            IDB$K_LENGTH     00000030            IO$V_DATACHECK = 0000000E            

CRB$L_INTD       00000014            IDB$L_ADP        0000000C            IO$V_DELETE    = 00000008            

CRB$L_INTD2      00000038            IDB$L_CSR        00000000            IO$V_DMOUNT    = 0000000A            

CRB$L_LINK       00000010            IDB$L_OWNER      00000004            IO$V_DSABLMBX  = 0000000A            

CRB$L_TT_DIAL    00000000            IDB$L_UCBLST     00000010            IO$V_ENABLMBX  = 00000007            

CRB$L_WQBL       00000004            IDB$W_SIZE       00000008            IO$V_FCODE     = 00000000            

CRB$L_WQFL       00000000            INTEXIT          000005EA R     04   IO$V_HANGUP    = 00000009            

CRB$M_BSY      = 00000001            IO$M_ABORT     = 00000100            IO$V_INHERLOG  = 0000000B            

CRB$V_BSY      = 00000000            IO$M_ACCESS    = 00000040            IO$V_INHEXTGAP = 0000000C            

CRB$W_REFC       0000000C            IO$M_ATTNAST   = 00000100            IO$V_INHRETRY  = 0000000F            

CRB$W_SIZE       00000008            IO$M_BINARY    = 00000040            IO$V_INHSEEK   = 0000000C            

DC$_SCOM         ********   X   03   IO$M_CANCTRLO  = 00000040            IO$V_INTERRUPT = 00000006            

DDB$B_ACPCLASS   00000013            IO$M_COMMOD    = 00000040            IO$V_INTSKIP   = 00000008            

DDB$B_TYPE       0000000A            IO$M_CREATE    = 00000080            IO$V_MOUNT     = 00000009            

DDB$C_LENGTH     00000034            IO$M_CTRLCAST  = 00000100            IO$V_NOECHO    = 00000006            

DDB$K_LENGTH     00000034            IO$M_CTRLYAST  = 00000080            IO$V_NOFILTR   = 00000009            

DDB$L_ACPD       00000010            IO$M_CVTLOW    = 00000100            IO$V_NOFORMAT  = 00000008            

DDB$L_DDT        0000000C            IO$M_DATACHECK = 00004000            IO$V_NOW       = 00000006            

DDB$L_LINK       00000000            IO$M_DELETE    = 00000100            IO$V_NOWAIT    = 00000007            

DDB$L_UCB        00000004            IO$M_DMOUNT    = 00000400            IO$V_PACKED    = 00000007            

DDB$T_DRVNAME    00000024            IO$M_DSABLMBX  = 00000400            IO$V_PURGE     = 0000000B            

DDB$T_NAME       00000014            IO$M_ENABLMBX  = 00000080            IO$V_READATTN  = 00000007            

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  45

SYMBOL TABLE                                                                                                                    (27)



IO$V_REVERSE   = 00000006            IOC$DIAGBUFILL   ********   X   04   IRP$V_BUFIO    = 00000000            

IO$V_SHUTDOWN  = 00000007            IOC$LOADUBAMAP   ********   X   04   IRP$V_CHAINED  = 00000005            

IO$V_STARTUP   = 00000006            IOC$PTETOPFN     ********   X   04   IRP$V_COMPLX   = 00000003            

IO$V_SYNCH     = 00000009            IOC$RELDATAP     ********   X   04   IRP$V_DIAGBUF  = 00000007            

IO$V_TIMED     = 00000007            IOC$RELMAPREG    ********   X   04   IRP$V_FCODE    = 00000000            

IO$V_TRMNOECHO = 0000000C            IOC$REQCOM       ********   X   04   IRP$V_FMOD     = 00000006            

IO$V_WRTATTN   = 00000008            IOC$REQDATAP     ********   X   04   IRP$V_FUNC     = 00000001            

IO$_ACCESS     = 00000032            IOC$REQDATAPNW   ********   X   04   IRP$V_MBXIO    = 0000000A            

IO$_ACPCONTROL = 00000038            IOC$REQMAPREG    ********   X   04   IRP$V_MODE     = 00000000            

IO$_CREATE     = 00000033            IOC$RETURN       ********   X   04   IRP$V_PAGIO    = 00000002            

IO$_DEACCESS   = 00000034            IPL$_ASTDEL    = 00000002            IRP$V_PHYSIO   = 00000008            

IO$_DELETE     = 00000035            IPL$_HWCLK     = 00000018            IRP$V_PRIVIO   = 00000009            

IO$_DIAGNOSE   = 0000001D            IPL$_IOPOST    = 00000004            IRP$V_SWAPIO   = 00000006            

IO$_DRVCLR     = 00000004            IPL$_MAILBOX   = 0000000B            IRP$V_VIRTUAL  = 00000004            

IO$_ERASETAPE  = 00000006            IPL$_POWER     = 0000001F            IRP$W_ABCNT      0000003C            

IO$_LOGICAL    = 0000002F            IPL$_QUEUEAST  = 00000006            IRP$W_BCNT       00000032            

IO$_MODIFY     = 00000036            IPL$_SCHED     = 00000003            IRP$W_BOFF       00000030            

IO$_MOUNT      = 00000039            IPL$_SYNCH     = 00000007            IRP$W_CHAN       00000028            

IO$_NOP        = 00000000            IPL$_TIMER     = 00000007            IRP$W_FUNC       00000020            

IO$_OFFSET     = 00000006            IRP$B_CARCON     00000038            IRP$W_OBCNT      0000003E            

IO$_PACKACK    = 00000008            IRP$B_EFN        00000022            IRP$W_SIZE       00000008            

IO$_PHYSICAL   = 0000001F            IRP$B_PRI        00000023            IRP$W_STS        0000002A            

IO$_READHEAD   = 0000000E            IRP$B_RMOD       0000000B            IRP$W_TT_PRMPT   0000003C            

IO$_READLBLK   = 00000021            IRP$B_TYPE       0000000A            MASKH          = 00000008            

IO$_READPBLK   = 0000000C            IRP$C_LENGTH     0000004C            MASKL          = 04000000            

IO$_READPRESET = 00000019            IRP$K_LENGTH     0000004C            MMG$GL_SPTBASE   ********   X   04   

IO$_READPROMPT = 00000037            IRP$L_AST        00000010            MSG$_ABOOPR    = 00000011            

IO$_READTRACKD = 00000010            IRP$L_ASTPRM     00000014            MSG$_ABORT     = 00000030            

IO$_READVBLK   = 00000031            IRP$L_DIAGBUF    00000044            MSG$_ACCRSP    = 00000021            

IO$_RECAL      = 00000003            IRP$L_IOQBL      00000004            MSG$_CONFIRM   = 00000031            

IO$_RELEASE    = 00000005            IRP$L_IOQFL      00000000            MSG$_CONNECT   = 00000032            

IO$_RETCENTER  = 00000007            IRP$L_IOSB       00000024            MSG$_CRUNSOLIC = 00000002            

IO$_REWIND     = 00000024            IRP$L_IOST1      00000034            MSG$_DELPROC   = 00000003            

IO$_REWINDOFF  = 00000022            IRP$L_IOST2      00000038            MSG$_DELSMB    = 00000014            

IO$_SEARCH     = 00000009            IRP$L_MEDIA      00000034            MSG$_DEVOFFLIN = 00000005            

IO$_SEEK       = 00000002            IRP$L_PID        0000000C            MSG$_DEVONLIN  = 00000007            

IO$_SENSECHAR  = 0000001B            IRP$L_SEGVBN     00000040            MSG$_DISCON    = 00000033            

IO$_SENSEMODE  = 00000027            IRP$L_SEQNUM     00000048            MSG$_EXIT      = 00000034            

IO$_SETCHAR    = 0000001A            IRP$L_SVAPTE     0000002C            MSG$_INIOPR    = 00000010            

IO$_SETMODE    = 00000023            IRP$L_TT_TERM    00000038            MSG$_INTMSG    = 00000035            

IO$_SKIPFILE   = 00000025            IRP$L_UCB        0000001C            MSG$_OPREPLY   = 00000009            

IO$_SKIPRECORD = 00000026            IRP$L_WIND       00000018            MSG$_OPRQST    = 00000008            

IO$_SPACEFILE  = 00000002            IRP$M_BUFIO    = 00000001            MSG$_PATHLOST  = 00000036            

IO$_SPACERECORD= 00000009            IRP$M_CHAINED  = 00000020            MSG$_PROTOCOL  = 00000037            

IO$_STARTSPNDL = 00000019            IRP$M_COMPLX   = 00000008            MSG$_REJECT    = 00000038            

IO$_UNLOAD     = 00000001            IRP$M_DIAGBUF  = 00000080            MSG$_RESOPR    = 00000013            

IO$_VIRTUAL    = 0000003F            IRP$M_FUNC     = 00000002            MSG$_SCANBAD   = 00000028            

IO$_WRITECHECK = 0000000A            IRP$M_MBXIO    = 00000400            MSG$_SCANRSP   = 00000029            

IO$_WRITECHECKH= 00000018            IRP$M_PAGIO    = 00000004            MSG$_SMBDON    = 00000009            

IO$_WRITEHEAD  = 0000000D            IRP$M_PHYSIO   = 00000100            MSG$_SMBINI    = 00000008            

IO$_WRITELBLK  = 00000020            IRP$M_PRIVIO   = 00000200            MSG$_SMBRSP    = 00000020            

IO$_WRITEMARK  = 0000001C            IRP$M_SWAPIO   = 00000040            MSG$_SNDACC    = 0000000A            

IO$_WRITEOF    = 00000028            IRP$M_VIRTUAL  = 00000010            MSG$_SNDSMB    = 00000004            

IO$_WRITEPBLK  = 0000000B            IRP$Q_NT_PRVMSK  0000003C            MSG$_SUSOPR    = 00000012            

IO$_WRITETRACKD= 0000000F            IRP$S_FCODE    = 00000006            MSG$_THIRDPARTY= 00000039            

IO$_WRITEVBLK  = 00000030            IRP$S_FMOD     = 0000000A            MSG$_TIMEOUT   = 0000003A            

IOC$ALOUBAMAP    ********   X   04   IRP$S_MODE     = 00000002            MSG$_TRMHANGUP = 00000006            

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  46

SYMBOL TABLE                                                                                                                    (27)



MSG$_TRMUNSOLIC= 00000001            PCB$V_PWRAST   = 00000016            SYNCH_UNIT       00000438 R     04   

MSG$_XM_ATTN   = 0000000D            PCB$V_RES      = 00000000            TIMEOUT          000008A8 R     04   

MSG$_XM_DATAVL = 0000000B            PCB$V_RESPEN   = 00000005            UBA$L_BRRVR      00000030            

MSG$_XM_SHUTDN = 0000000C            PCB$V_SSFEXC   = 00000006            UBA$L_BRSVR      00000020            

MSG_BLKSIZE      00000008            PCB$V_SSFEXCE  = 00000007            UBA$L_CR         00000004            

MSG_BLKTYPE      0000000A            PCB$V_SSFEXCS  = 00000008            UBA$L_CSR        00000000            

MSG_CSR          00000014            PCB$V_SSFEXCU  = 00000009            UBA$L_DCR        0000000C            

MSG_DATA         00000018            PCB$V_SSRWAIT  = 0000000A            UBA$L_DPR        00000040            

MSG_FIPL         0000000B            PCB$V_SUSPEN   = 0000000B            UBA$L_FMER       00000010            

MSG_FPC          0000000C            PCB$V_SWPVBN   = 00000010            UBA$L_FUBAR      00000014            

MSG_LINK         00000000            PCB$V_WAKEPEN  = 0000000C            UBA$L_MAP        00000800            

MSG_MAP1         00000010            PCB$V_WALL     = 0000000D            UBA$L_SR         00000008            

MSG_MAP2         00000014            PCB$W_APTCNT     00000034            UBA$M_BRRVR_AIR= 80000000            

MSG_PORT         00000010            PCB$W_ASTCNT     0000003C            UBA$M_CR_ARLVL = 00000180            

MSG_UBVA         0000000C            PCB$W_BIOCNT     0000003E            UBA$M_CR_BRIE  = 00000020            

P1             = 00000000            PCB$W_BIOLM      00000040            UBA$M_CR_CNFIE = 00000004            

P2             = 00000004            PCB$W_BYTCNT     00000042            UBA$M_CR_IFSIE = 00000040            

P3             = 00000008            PCB$W_BYTLM      00000068            UBA$M_CR_INIT  = 00000001            

PCB$B_ASTACT     0000000C            PCB$W_DIOCNT     00000044            UBA$M_CR_SUEFIE= 00000008            

PCB$B_ASTEN      0000000D            PCB$W_DIOLM      00000046            UBA$M_CR_UBPF  = 00000002            

PCB$B_PRI        0000000B            PCB$W_FILCNT     00000048            UBA$M_CR_USEFIE= 00000010            

PCB$B_PRIB       00000033            PCB$W_GPGCNT     00000038            UBA$M_CSR_IS   = 10000000            

PCB$B_TYPE       0000000A            PCB$W_GRP        00000022            UBA$M_CSR_MT   = 08000000            

PCB$B_WEFC       00000032            PCB$W_MEM        00000020            UBA$M_CSR_OT   = 00200000            

PCB$C_LENGTH     0000007C            PCB$W_MTXCNT     0000000E            UBA$M_CSR_PD   = 00800000            

PCB$K_LENGTH     0000007C            PCB$W_PPGCNT     0000003A            UBA$M_CSR_PE   = 80000000            

PCB$L_ASTQBL     00000014            PCB$W_PRCCNT     0000006A            UBA$M_CSR_PU   = 00400000            

PCB$L_ASTQFL     00000010            PCB$W_SIZE       00000008            UBA$M_CSR_UBIC = 00010000            

PCB$L_EFC2P      00000058            PCB$W_STATE      00000030            UBA$M_CSR_UBIIP= 00040000            

PCB$L_EFC3P      0000005C            PCB$W_TMBU       00000036            UBA$M_CSR_UBPDN= 00020000            

PCB$L_EFCS       00000050            PCB$W_TQCNT      0000004A            UBA$M_CSR_URD  = 20000000            

PCB$L_EFCU       00000054            POKE_USER        0000086E R     04   UBA$M_CSR_WS   = 40000000            

PCB$L_EFWM       0000004C            PORT_INTR        00000590 R     04   UBA$M_CSR_XMFLT= 04000000            

PCB$L_OWNER      0000001C            PR$_IPL          ********   X   04   UBA$M_DPR_BNE  = 80000000            

PCB$L_PHD        00000064            PURGE_DATAPATH   0000074F R     04   UBA$M_DPR_DPF  = 20000000            

PCB$L_PHYPCB     00000018            RCVDONEFORK      00000771 R     04   UBA$M_DPR_XMTER= 40000000            

PCB$L_PID        00000060            RCVFDT           00000079 R     04   UBA$M_MAP_BO   = 02000000            

PCB$L_PQB        0000004C            RCV_IO_DONE      000007D7 R     04   UBA$M_MAP_VALID= 80000000            

PCB$L_SQBL       00000004            REGDUMP          00000846 R     04   UBA$M_SR_BRID  = 00000800            

PCB$L_SQFL       00000000            REQUEST_PORT     000005FE R     04   UBA$M_SR_BRSVF = 10000000            

PCB$L_STS        00000028            RQSTRCVSTRT      000005F4 R     04   UBA$M_SR_CRD   = 00000100            

PCB$L_UIC        00000020            RQSTXMITSTRT     000005F9 R     04   UBA$M_SR_CXTER = 00000080            

PCB$L_WSSWP      00000024            SCH$GL_PCBVEC    ********   X   04   UBA$M_SR_CXTMO = 00000040            

PCB$L_WTIME      0000002C            SETMODEFDT       000000D8 R     04   UBA$M_SR_DPPE  = 00000020            

PCB$T_LNAME      0000006C            SHUTDOWN         00000916 R     04   UBA$M_SR_IVMR  = 00000010            

PCB$V_ASTPEN   = 00000011            SS$_ABORT        ********   X   04   UBA$M_SR_LER   = 00000004            

PCB$V_BATCH    = 0000000E            SS$_ACCVIO       ********   X   04   UBA$M_SR_MRPE  = 00000008            

PCB$V_DELPEN   = 00000001            SS$_BADPARAM     ********   X   04   UBA$M_SR_RDS   = 00000200            

PCB$V_FORCPEN  = 00000002            SS$_CTRLERR      ********   X   04   UBA$M_SR_RDTO  = 00000400            

PCB$V_HIBER    = 00000013            SS$_DATAOVERUN   ********   X   04   UBA$M_SR_RIE   = 20000000            

PCB$V_INQUAN   = 00000003            SS$_DEVACTIVE    ********   X   04   UBA$M_SR_SSYNC = 00000001            

PCB$V_LOGIN    = 00000014            SS$_DEVOFFLINE   ********   X   04   UBA$M_SR_UBIFS = 40000000            

PCB$V_NETWRK   = 00000015            SS$_ENDOFFILE    ********   X   04   UBA$M_SR_UBSTO = 00000002            

PCB$V_NOACNT   = 0000000F            SS$_NORMAL       ********   X   04   UBA$S_BRRVR_IVA= 00000010            

PCB$V_NODELET  = 00000017            START            00000262 R     04   UBA$S_CR_ARLVL = 00000002            

PCB$V_PHDRES   = 00000012            STARTIO          000001BB R     04   UBA$S_CR_MRDSB = 00000005            

PCB$V_PSWAPM   = 00000004            STARTRECEIVE     000004EF R     04   UBA$S_CSR_ADCOD= 00000008            

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  47

SYMBOL TABLE                                                                                                                    (27)



UBA$S_DPR_ADDR = 00000010            UBA$V_SR_UBSTO = 00000001            UCB$L_NT_INTSSB  00000078            

UBA$S_DPR_STATE= 00000008            UCB$B_AMOD       00000053            UCB$L_OPCNT      00000060            

UBA$S_FMER_MRN = 00000009            UCB$B_CEX        00000077            UCB$L_OWNUIC     0000001C            

UBA$S_FUBAR_ADR= 00000012            UCB$B_CM1        0000004A            UCB$L_PID        00000028            

UBA$S_MAP_ADDR = 00000015            UCB$B_CM2        0000004B            UCB$L_RQBL       00000004            

UBA$S_MAP_DPD  = 00000004            UCB$B_DEVCLASS   00000038            UCB$L_RQFL       00000000            

UBA$S_SR_BRRVF = 00000004            UCB$B_DEVTYPE    00000039            UCB$L_SVAPTE     00000068            

UBA$V_BRRVR_AIR= 0000001F            UCB$B_DIPL       00000052            UCB$L_SVPN       00000064            

UBA$V_BRRVR_IVA= 00000000            UCB$B_DX_SCTCNT  000000A6            UCB$L_TTCHAR     0000003C            

UBA$V_CR_ARLVL = 00000007            UCB$B_ERTCNT     00000070            UCB$L_VCB        00000030            

UBA$V_CR_BRIE  = 00000005            UCB$B_ERTMAX     00000071            UCB$L_XM_AST     000000B8            

UBA$V_CR_CNFIE = 00000002            UCB$B_ESCAPE     0000004B            UCB$L_XM_BASAD   000000B4            

UBA$V_CR_IFSIE = 00000006            UCB$B_FEX        00000076            UCB$L_XM_ERRFKB  0000009C            

UBA$V_CR_INIT  = 00000000            UCB$B_FIPL       0000000B            UCB$L_XM_LSTCSR  000000B0            

UBA$V_CR_MRDSB = 0000001A            UCB$B_LOCSRV     0000003C            UCB$L_XM_LSTPRT  000000AC            

UBA$V_CR_SUEFIE= 00000003            UCB$B_OFFNDX     00000094            UCB$L_XM_PID     000000C0            

UBA$V_CR_UBPF  = 00000001            UCB$B_OFFRTC     00000095            UCB$M_BACKP    = 00000020            

UBA$V_CR_USEFIE= 00000004            UCB$B_REMSRV     0000003D            UCB$M_BSY      = 00000100            

UBA$V_CSR_ADCOD= 00000000            UCB$B_SECTORS    0000003C            UCB$M_CANCEL   = 00000008            

UBA$V_CSR_IS   = 0000001C            UCB$B_SLAVE      00000074            UCB$M_DEADMO   = 00000400            

UBA$V_CSR_MT   = 0000001B            UCB$B_SPR        00000075            UCB$M_DELMBX   = 00000002            

UBA$V_CSR_OT   = 00000015            UCB$B_STATE      00000052            UCB$M_DIAGBUF  = 00000002            

UBA$V_CSR_PD   = 00000017            UCB$B_TRACKS     0000003D            UCB$M_DX_WRITE = 00000008            

UBA$V_CSR_PE   = 0000001F            UCB$B_TYPE       0000000A            UCB$M_ECC      = 00000001            

UBA$V_CSR_PU   = 00000016            UCB$B_VERTSZ     0000003F            UCB$M_ERLOGIP  = 00000004            

UBA$V_CSR_UBIC = 00000010            UCB$B_XM_EIPL    000000A7            UCB$M_INT      = 00000002            

UBA$V_CSR_UBIIP= 00000012            UCB$C_LENGTH     00000074            UCB$M_INTTYPE  = 00000080            

UBA$V_CSR_UBPDN= 00000011            UCB$C_LOGLNK   = 00000001            UCB$M_JOB      = 00000001            

UBA$V_CSR_URD  = 0000001D            UCB$K_LENGTH     00000074            UCB$M_MOUNTING = 00000200            

UBA$V_CSR_WS   = 0000001E            UCB$L_AMB        00000054            UCB$M_NOCNVRT  = 00000004            

UBA$V_CSR_XMFLT= 0000001A            UCB$L_ASTQBL     00000010            UCB$M_NT_BFROVF= 00000004            

UBA$V_DPR_ADDR = 00000000            UCB$L_ASTQFL     0000000C            UCB$M_NT_BREAK = 00000020            

UBA$V_DPR_BNE  = 0000001F            UCB$L_CPID       0000005C            UCB$M_NT_NAME  = 00000010            

UBA$V_DPR_DPF  = 0000001D            UCB$L_CRB        00000020            UCB$M_ONLINE   = 00000010            

UBA$V_DPR_STATE= 00000010            UCB$L_DDB        00000024            UCB$M_POWER    = 00000020            

UBA$V_DPR_XMTER= 0000001E            UCB$L_DEVCHAR    00000034            UCB$M_PRMMBX   = 00000001            

UBA$V_FMER_MRN = 00000000            UCB$L_DEVDEPEND  0000003C            UCB$M_TIM      = 00000001            

UBA$V_FUBAR_ADR= 00000000            UCB$L_DPC        00000080            UCB$M_TIMOUT   = 00000040            

UBA$V_MAP_ADDR = 00000000            UCB$L_DUETIM     0000005C            UCB$M_TT_NOTIF = 00000004            

UBA$V_MAP_BO   = 00000019            UCB$L_DX_BFPNT   0000009C            UCB$M_TT_TIMO  = 00000002            

UBA$V_MAP_DPD  = 00000015            UCB$L_DX_BUF     00000098            UCB$M_UNLOAD   = 00001000            

UBA$V_MAP_VALID= 0000001F            UCB$L_DX_RXDB    000000A0            UCB$M_VALID    = 00000800            

UBA$V_SR_BRID  = 0000000B            UCB$L_EMB        00000078            UCB$Q_XM_ATTN    00000074            

UBA$V_SR_BRRVF = 00000018            UCB$L_FIRST      00000014            UCB$Q_XM_CURCV1  0000008C            

UBA$V_SR_BRSVF = 0000001C            UCB$L_FPC        0000000C            UCB$Q_XM_CURCV2  00000094            

UBA$V_SR_CRD   = 00000008            UCB$L_FQBL       00000004            UCB$Q_XM_FREE    00000084            

UBA$V_SR_CXTER = 00000007            UCB$L_FQFL       00000000            UCB$Q_XM_RCVS    0000007C            

UBA$V_SR_CXTMO = 00000006            UCB$L_FR3        00000010            UCB$S_LNKPRI   = 00000002            

UBA$V_SR_DPPE  = 00000005            UCB$L_FR4        00000014            UCB$S_LTYPE    = 00000002            

UBA$V_SR_IVMR  = 00000004            UCB$L_IOQBL      00000044            UCB$T_PARTNER    0000000C            

UBA$V_SR_LER   = 00000002            UCB$L_IOQFL      00000040            UCB$V_BACKP    = 00000005            

UBA$V_SR_MRPE  = 00000003            UCB$L_IRP        0000004C            UCB$V_BSY      = 00000008            

UBA$V_SR_RDS   = 00000009            UCB$L_LINK       0000002C            UCB$V_CANCEL   = 00000003            

UBA$V_SR_RDTO  = 0000000A            UCB$L_LOGADR     00000064            UCB$V_DEADMO   = 0000000A            

UBA$V_SR_RIE   = 0000001D            UCB$L_MAXBLOCK   00000084            UCB$V_DELMBX   = 00000001            

UBA$V_SR_SSYNC = 00000000            UCB$L_MEDIA      0000008C            UCB$V_DIAGBUF  = 00000001            

UBA$V_SR_UBIFS = 0000001E            UCB$L_NT_DATSSB  00000074            UCB$V_DX_WRITE = 00000003            

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  48

SYMBOL TABLE                                                                                                                    (27)



UCB$V_ECC      = 00000000            VA$S_BYTE        ********   X   04   XM_DS_M_NOTIF  = 00000800            

UCB$V_ERLOGIP  = 00000002            VA$S_VPN         ********   X   04   XM_DS_M_REQUEST= 00000020            

UCB$V_INT      = 00000001            VA$V_BYTE        ********   X   04   XM_DS_M_RQSTRCV= 00000004            

UCB$V_INTTYPE  = 00000007            VA$V_VPN         ********   X   04   XM_DS_M_RQSTXMT= 00000008            

UCB$V_JOB      = 00000000            VEC$B_DATAPATH   00000013            XM_DS_M_XMTINP = 00000200            

UCB$V_LNKPRI   = 00000006            VEC$B_NUMREG     00000012            XM_DS_M_XMTPND = 00000100            

UCB$V_LTYPE    = 00000000            VEC$C_LENGTH     00000024            XM_DS_V_INITED = 0000000A            

UCB$V_MOUNTING = 00000009            VEC$K_LENGTH     00000024            XM_DS_V_NOTIF  = 0000000B            

UCB$V_MSGACK   = 00000004            VEC$L_ADP        00000014            XM_DS_V_REQUEST= 00000005            

UCB$V_MSGFLO   = 00000003            VEC$L_IDB        00000008            XM_DS_V_RQSTRCV= 00000002            

UCB$V_NOCNVRT  = 00000002            VEC$L_INITIAL    0000000C            XM_DS_V_RQSTXMT= 00000003            

UCB$V_NT_BFROVF= 00000002            VEC$L_START      0000001C            XM_DS_V_XMTINP = 00000009            

UCB$V_NT_BREAK = 00000005            VEC$L_UNITDISC   00000020            XM_DS_V_XMTPND = 00000008            

UCB$V_NT_NAME  = 00000004            VEC$L_UNITINIT   00000018            XM_END           00000B03 R     04   

UCB$V_ONLINE   = 00000004            VEC$M_MAPLOCK  = 00008000            XM_E_M_DCHK    = 00000001            

UCB$V_POWER    = 00000005            VEC$M_PATHLOCK = 00000080            XM_E_M_LINEDWN = 00000040            

UCB$V_PRMMBX   = 00000000            VEC$Q_DISPATCH   00000000            XM_E_M_LOST    = 00000010            

UCB$V_SEGFLO   = 00000002            VEC$S_DATAPATH = 00000007            XM_E_M_MOP     = 00000008            

UCB$V_TIM      = 00000000            VEC$S_MAPREG   = 0000000F            XM_E_M_NONEXMEM= 00000100            

UCB$V_TIMOUT   = 00000006            VEC$V_DATAPATH = 00000000            XM_E_M_ORUN    = 00000004            

UCB$V_TT_NOTIF = 00000002            VEC$V_MAPLOCK  = 0000000F            XM_E_M_POWER   = 00000400            

UCB$V_TT_TIMO  = 00000001            VEC$V_MAPREG   = 00000000            XM_E_M_PROCERR = 00000200            

UCB$V_UNLOAD   = 0000000C            VEC$V_PATHLOCK = 00000007            XM_E_M_START   = 00000080            

UCB$V_VALID    = 0000000B            VEC$W_MAPREG     00000010            XM_E_M_TIMEOUT = 00000800            

UCB$W_BCNT       0000006E            XM$DDT           00000000 RG    04   XM_E_M_TIMO    = 00000002            

UCB$W_BCR        00000096            XM$M_CHR_HDPLX = 00000004            XM_E_M_TRNER   = 00000020            

UCB$W_BOFF       0000006C            XM$M_CHR_LOOPB = 00000002            XM_E_V_DCHK    = 00000000            

UCB$W_BUFQUO     00000018            XM$M_CHR_MBX   = 00000010            XM_E_V_LINEDWN = 00000006            

UCB$W_BYTESTOGO  0000003E            XM$M_CHR_MOP   = 00000001            XM_E_V_LOST    = 00000004            

UCB$W_CHARGE     0000004A            XM$M_CHR_SLAVE = 00000008            XM_E_V_MOP     = 00000003            

UCB$W_CYLINDERS  0000003E            XM$M_ERR_FATAL = 00010000            XM_E_V_NONEXMEM= 00000008            

UCB$W_DA         0000008C            XM$M_ERR_LOST  = 00100000            XM_E_V_ORUN    = 00000002            

UCB$W_DC         0000008E            XM$M_ERR_MAINT = 00080000            XM_E_V_POWER   = 0000000A            

UCB$W_DEVBUFSIZ  0000003A            XM$M_ERR_START = 00800000            XM_E_V_PROCERR = 00000009            

UCB$W_DEVSTS     0000005A            XM$M_STS_ACTIVE= 00000800            XM_E_V_START   = 00000007            

UCB$W_DIRSEQ     00000088            XM$M_STS_DCHK  = 00000100            XM_E_V_TIMEOUT = 0000000B            

UCB$W_DSTADDR    00000018            XM$M_STS_DISC  = 00004000            XM_E_V_TIMO    = 00000001            

UCB$W_DX_BCR     000000A4            XM$M_STS_ORUN  = 00000400            XM_E_V_TRNER   = 00000005            

UCB$W_EC1        00000090            XM$M_STS_TIMO  = 00000200            XM_FC_M_CHANGE = 00000008            

UCB$W_EC2        00000092            XM$V_CHR_HDPLX = 00000002            XM_FC_M_START  = 00000002            

UCB$W_ERRCNT     00000072            XM$V_CHR_LOOPB = 00000001            XM_FC_M_STOP   = 00000004            

UCB$W_FUNC       0000007E            XM$V_CHR_MBX   = 00000004            XM_FC_M_WRITE  = 00000001            

UCB$W_MB_SEED    FFFFFFFC            XM$V_CHR_MOP   = 00000000            XM_FC_V_CHANGE = 00000003            

UCB$W_MSGCNT     00000016            XM$V_CHR_SLAVE = 00000003            XM_FC_V_START  = 00000001            

UCB$W_MSGMAX     00000014            XM$V_ERR_FATAL = 00000010            XM_FC_V_STOP   = 00000002            

UCB$W_NT_CHAN    0000007C            XM$V_ERR_LOST  = 00000014            XM_FC_V_WRITE  = 00000000            

UCB$W_OFFSET     0000008A            XM$V_ERR_MAINT = 00000013            XM_I_CSR         00000000            

UCB$W_REFC       00000050            XM$V_ERR_START = 00000017            XM_I_M_INTEN   = 00000040            

UCB$W_SIZE       00000008            XM$V_STS_ACTIVE= 0000000B            XM_I_M_LOOPB   = 00000800            

UCB$W_SRCADDR    0000001A            XM$V_STS_DCHK  = 00000008            XM_I_M_MASTCLR = 00004000            

UCB$W_STS        00000058            XM$V_STS_DISC  = 0000000E            XM_I_M_RCV     = 00000004            

UCB$W_UNIT       00000048            XM$V_STS_ORUN  = 0000000A            XM_I_M_READY   = 00000080            

UCB$W_VPROT      0000001A            XM$V_STS_TIMO  = 00000009            XM_I_M_RQSTI   = 00000020            

UCB$W_XM_BASMP   000000BC            XMIT             00000204 R     04   XM_I_M_RUN     = 00008000            

UCB$W_XM_QUOTA   000000A4            XMITDONEFORK     000007FD R     04   XM_I_M_TYPE    = 00000003            

UNIT_INIT        00000052 R     04   XMITFDT          0000006D R     04   XM_I_S_TYPE    = 00000002            

VA$M_BYTE        ********   X   04   XM_DS_M_INITED = 00000400            XM_I_V_INTEN   = 00000006            

XMDRIVER        - VAX/VMS DMC-11 DRIVER                          21-AUG-1978 21:06:30   VAX-11 MACRO X0.3-11               Page  49

SYMBOL TABLE                                                                                                                    (27)



XM_I_V_LOOPB   = 0000000B            

XM_I_V_MASTCLR = 0000000E            

XM_I_V_RCV     = 00000002            

XM_I_V_READY   = 00000007            

XM_I_V_RQSTI   = 00000005            

XM_I_V_RUN     = 0000000F            

XM_I_V_TYPE    = 00000000            

XM_O_CSR         00000002            

XM_O_M_INTEN   = 00000040            

XM_O_M_RCV     = 00000004            

XM_O_M_READY   = 00000080            

XM_O_M_TYPE    = 00000003            

XM_O_S_TYPE    = 00000002            

XM_O_V_INTEN   = 00000006            

XM_O_V_RCV     = 00000002            

XM_O_V_READY   = 00000007            

XM_O_V_TYPE    = 00000000            

XM_PORT          00000004            

XM_RCV_M_INPR  = 00000002            

XM_RCV_M_INUS  = 00000001            

XM_RCV_V_INPR  = 00000001            

XM_RCV_V_INUS  = 00000000            





PROGRAM SECTION SYNOPSIS



.  ABS  .        00000000      00     NOPIC   USR   CON   ABS   LCL NOSHR NOEXE NORD  NOWRT BYTE  

. BLANK .        00000000      01     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

$ABS$            FFFFFFFE      02     NOPIC   USR   CON   ABS   LCL NOSHR   EXE   RD    WRT BYTE  

$$$105_PROLOGUE  0000005B      03     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

$$$115_DRIVER    00000B03      04     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT LONG  





THERE WERE NO ERRORS OR WARNINGS.

3044. BYTES LEFT IN FREE MEMORY POOL.

40. BYTES OF RECLAIMED MEMORY.

OBJ$:XMDRIVER,LIS$:XMDRIVER/-SP=EXECML$/ML,SRC$:XMDRIVER

20 MLB DIR RDS - 1155 GETS TO DEFINE 34 MACROS. 121 INTER. FILE WRITES. 

