Google
 

Trailing-Edge - PDP-10 Archives - BB-P363B-SM_1985 - mcb/drivers/le.lst
There are no other files named le.lst in the archive.
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26
LE.M11    30-DEC-82 03:53		TABLE OF CONTENTS

  1516		Macro Calls & Dispatch Entries
  1571		LE Data Base Offsets
  1723		Start / Stop Device  (FC.CTL)
  1853		Timer handler  (FC.TIM)
  1897		Resource Return
  1907		Message Received  (FC.RCP)
  2662		Support Routines
  3251		Interrupt Service
  3419		Miscellaneous Tables
  3506		Tables
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 1
LE.M11    30-DEC-82 03:53

     1					.ENABL	LC
     2					.title	LE	LP11 LLC and Driver
     3					.ident	"X02090"
     4
     5					;                    COPYRIGHT (c) 1980, 1981, 1982
     6					;                    DIGITAL EQUIPMENT CORPORATION
     7					;                        Maynard, Massachusetts
     8					;
     9					;     This software is furnished under a license and may  be  used
    10					;     and copied only in accordance with the terms of such license
    11					;     and with the inclusion of the above copyright notice.   This
    12					;     software  or any other copies thereof may not be provided or
    13					;     otherwise made available to any other person.  No  title  to
    14					;     and ownership of the software is hereby transferred.
    15					;
    16					;     The information  in  this  software  is  subject  to  change
    17					;     without  notice  and should not be construed as a commitment
    18					;     by DIGITAL EQUIPMENT CORPORATION.
    19					;
    20					;     DIGITAL assumes no responsibility for the use or reliability
    21					;     of  its  software  on  equipment  which  is  not supplied by
    22					;     DIGITAL.
    23					;
    24					;
    25					; Originally written by	TOM POWERS
    26					;		December, 1976
    27					;
    28					; X01010 thru X01100 omitted because following update constituted
    29					;		such a major change that previous audit trail
    30					;		was rendered meaningless - or at best useless.
    31					;
    32					; X02000	10-June-81 Buren Hoffman
    33					;		Extensive modifications to correspond to MCB V3.0,
    34					;		and a major facelift to aid maintainability.
    35					;
    36					; X02010	12-June-81	Buren Hoffman
    37					;		Fixed old calls to $CCBGT and $CCBRT to use new
    38					;		$CBBGT and $CBBRT.
    39					;
    40					; X02020	16-June-81	Buren Hoffman
    41					;		Added NOOP dispatches for Power-Failure and Initialization
    42					;		entries in the Timer Dispatch table.
    43					;
    44					; X02030	16-June-81	Buren Hoffman
    45					;		Minor bug fixes (i.e., typos, ...)
    46					;
    47					; X02040	18-June-81	Buren Hoffman
    48					;		Call TIMPIN routine for process initialization
    49					;
    50					; X02050	9-July-81	Buren Hoffman
    51					;		Simplified interrupt handling routine by removing
    52					;		compression-pair handling, and restructuring routine.
    53					;
    54					; X02060	12-July-81	Buren Hoffman
    55					;		Fixed bug in interrupt handler - device was being force fed
    56					;		whether it wanted it or not.
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 1-1
LE.M11    30-DEC-82 03:53

    57					;
    58					; X02070	15-July-81	Buren Hoffman
    59					;		Corrected problem in context switch.  Register was being
    60					;		clobbered.
    61					;
    62					; X02080	5-August-81	Buren Hoffman
    63					;		Reduced number of LPT physical buffers from 12 to 6.
    64					;
    65					; x02090	14-sept-81	Ron Platukis
    66					;		Fix routine SN$ATT to not set overprint error if there
    67					;		-was a page limit overflow.
    68					;
    69
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 2
LE.M11    30-DEC-82 03:53		MACRO CALLS & DISPATCH ENTRIES

    71					.sbttl	Macro Calls & Dispatch Entries
    72
    73					.mcall	NURDF$,CCBDF$,SYNDF$,SCDF$
    74					.mcall	PHD$B,DSP$,DSP$B,DSP$E,PUSH$S,POP$S,MAP$,SMAP$,DAT$,END$
    75	000000'					NURDF$
    76	000000'					CCBDF$
    77	000000'					SYNDF$
    78	000000'					SCDF$
    79
    80					;+
    81					;  Identify us to MCB
    82					;+
    83	000000'					PHD$B	LE
    84	000040'					PHD$D	LEMCB
    85	000020'					PHD$E
    86
    87		000000'			.psect	$PLIT$,D,RO
    88
    89					;+
    90					; Dispatch tables
    91					;-
    92	000000'				LEMCB:	DSP$B
    93	000000'					 DSP$				; Asynchronous trap
    94	000002'					 DSP$	FC.XME			; Xmit enable
    95	000004'					 DSP$	FC.RCE			; Receive enable
    96	000006'					 DSP$	FC.KIL			; Kill
    97	000010'					 DSP$	FC.CTL,LECTL		; Control		(start / stop)
    98	000012'					 DSP$	FC.TIM,LETIM		; Timeout		(clock)
    99	000014'					 DSP$	FC.XCP,LEDONE		; Xmit complete		(resource ret)
   100	000016'					 DSP$	FC.RCP,LEDSP		; Receive complete	(arriving data)
   101	000020'					 DSP$	FC.KCP			; Kill complete
   102	000022'					 DSP$	FC.CCP			; Control complete
   103	000024'					DSP$E
   104
   105					;+
   106					; Control dispatch
   107					;-
   108	000024'				LECTL:	CALLR	@1$(R3)
   109	000030'				1$:	DSP$B
   110	000030'					 DSP$
   111	000032'					 DSP$	FM.STR,DVOPEN		;Start device
   112	000034'					 DSP$	FM.STP,DVCLOS		;Stop device
   113	000036'					DSP$E
   114
   115					;+
   116					; Timer dispatch
   117					;-
   118	000036'				LETIM:	CALLR	@1$(R3)
   119	000042'				1$:	DSP$B
   120	000042'					 DSP$	FM.STM			;Short timer
   121	000044'					 DSP$	FM.LTM,CLOCK		;Long timer
   122	000046'					 DSP$	FM.PWF,NOOP		;Power failure
   123	000050'					 DSP$	FM.PIN,TIMPIN		;Initialization
   124	000052'					DSP$E
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 3
LE.M11    30-DEC-82 03:53		LE DATA BASE OFFSETS

   126					.SBTTL	LE Data Base Offsets
   127
   128					; NURD LP11 Device driver Data Base
   129
   130	000052'					DAT$	DSR
   131	000000	000001			L.TIMC:	.blkb	1		; Timer byte
   132	000001	000001			L.NRD:	.blkb	1		; NRD's PIX
   133	000002				L.CSR:	CSR$W			; One word CSR pointer
   134		000020				DTXTSZ= 16.		; Data/features process context allocated
   135	000004	000020			L.DTXT:	.blkw	DTXTSZ		; Context block for data/features process
   136	000044	000001			L.DTXL:	.blkb	1		; Number of words on stack at sleep time
   137		000046				.even
   138	000046	000001			L.DFSP:	.blkw	1		; Stack origin
   139	000050				L.SYN:	SYN$X			; Synch block
   140	000056	000001			L.ASTS:	.blkw	1		; Action status bit map
   141		000001				LA.CLO== 1		; Closed
   142		000002				LA.PAU = 2		; Paused
   143		000004				LA.ADN = 4		; Abort when done with DDM queue
   144		000010				LA.ABO = 10		; Aborting
   145		000020				LA.ABE = 20		; Clear abort on EOF (else on clear)
   146		000040				LA.CPC = 40		; Clear page counter enable
   147		000100				LA.AKR = 100		; Acknowledge requested
   148		000200				LA.ERR = 200		; An error has been noted
   149		000400				LA.EOF = 400		; Current message has EOF
   150		001000				LA.EOR = 1000		; End of record (EOR) encountered
   151		002000				LA.CTL = 2000		; Control message to return
   152		004000				LA.TMO = 4000		; Device time out
   153		010000				LA.PLE = 10000		; Page limit error occurred
   154		020000				LA.INT = 20000		; Interrupt in progress
   155	000060	000002			L.PUBP:	.blkw	2		; Buffer pointer doubleword
   156	000064	000001			L.PUBS:	.blkw	1		; Buffer size down counter
   157	000066				L.DDMQ:	LST$D			; CCBs queued for output
   158	000072	000001			L.PGCT:	.blkw	1		; Physical page count
   159	000074	000001			L.PGLM::.blkw	1		; Page limit register
   160	000076	000001			L.PLNC:	.blkb	1		; Physical line count
   161	000077	000001			L.HUNG:	.blkb	1		; Device hung timer
   162
   163					;  Miscellaneous items
   164	000100	000001			L.IOCN:	.blkw	1		; Outstanding I/O count
   165	000102	000001			L.IOWT:	.blkw	1		; Close wait flag (close CCB address)
   166
   167					;  Control message processing data base
   168	000104				L.CMSQ:	LST$D			; Control message queue
   169	000110	000001			L.RECO:	.blkb	1		; Control message resource error flag
   170	000111	000001			L.RATT:	.blkb	1		; Pending attention message flag - reason code
   171	000112	000001			L.CAPP:	.blkb	1		; Pending capabilities message flag
   172
   173					;  Data & features processing data base
   174	000113	000001			L.LNCT:	.blkb	1		; Line counter
   175	000114	000001			L.COCT:	.blkb	1		; Column counter
   176		000116				.even
   177	000116				L.DLCQ:	LST$D			; CCBs queued into DLC
   178	000122	000001			L.MFLG:	.blkb	1		; Current NURD message flags
   179	000123	000001			L.DMSQ:	.blkb	1		; Last good/current data sequence numbers
   180	000124	000001			L.DMSG:	.blkb	1		; Data message segment count byte
   181	000125	000001			L.DMSS:	.blkb	1		; Data message current segment size
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 3-1
LE.M11    30-DEC-82 03:53		LE DATA BASE OFFSETS

   182	000126	000001			L.CAPN:	.blkb	1		; Current index into capabilities list
   183	000127	000001			L.NFSP:	.blkb	1		; No. feature specs in current message
   184						.even
   185	000130	000001			L.DMCR:	.blkw	1		; Char repeat count, 2 bytes used as word
   186	000132	000002			L.DMAD:	.blkw	2		; Data message address doubleword
   187	000136	000001			L.DMBS:	.blkw	1		; Data message buffer size
   188	000140				L.PLBQ:	LST$D			; Free physical buffer queue
   189	000144	000002			L.PLBP:	.blkw	2		; Character pointer doubleword
   190	000150	000001			L.PLBS:	.blkw	1		; Buffer size down counter
   191	000152	000001			L.PBRC:	.blkb	1		; Temp byte
   192		000154				.even
   193	000154				L.MSGQ:	LST$D			; Outgoing message queue
   194	000160	000002			L.MSGA:	.blkw	2		; Current message buffer address doubleword
   195	000164	000001			L.MSGS:	.blkw	1		; Current message buffer size
   196
   197					; LP11 common feature list
   198	000166	000001			L.CFET:	.blkb	1		; Number of common features 
   199	000167	000001				.blkb	1		; FE.DAT     supported
   200	000170	000001				.blkb	1		; FE.SER not supported
   201	000171	000001				.blkb	1		; FE.LCR     supported
   202	000172	000001				.blkb	1		; FE.FWD     supported
   203	000173	000001				.blkb	1		; FE.EOF not supported
   204	000174	000001				.blkb	1		; FE.DVT not supported
   205	000175	000001				.blkb	1		; FE.TRN     supported
   206	000176	000001				.blkb	1		; FE.FNM not supported
   207	000177	000001				.blkb	1		; FE.DWD     supported
   208		000011				LCFETL== .-L.CFET-1
   209
   210	000200	000001			L.DFET:	.blkb	1		; Number of device specific features
   211	000201	000001				.blkb	1		; 129    not defined
   212	000202	000001				.blkb	1		; LP.HT      supported
   213	000203	000001				.blkb	1		; LP.SFC     supported
   214	000204	000001				.blkb	1		; LP.OVP not supported
   215	000205	000001				.blkb	1		; LP.CVF not supported
   216	000206	000001				.blkb	1		; LP.FCC     supported
   217	000207	000001				.blkb	1		; LP.VFR not supported
   218	000210	000001				.blkb	1		; LP.CHS     supported
   219	000211	000001				.blkb	1		; LP.PLE     supported
   220	000212	000001				.blkb	1		; LP.OPV not supported
   221		000012				LDFETL== .-L.DFET-1
   222
   223					; Feature blocks
   224		000000			F.FSB = 0			; (BM) Features status byte
   225		000000				FB.CL0 = 0		; Class 0 feature => <bit> form
   226		000001				FB.CL1== 1		; Class 1 feature => <cnt><...> form
   227		000002				FB.WRD = 2		; Feature is a word and F.FCV is offset to it
   228		000004				FB.STR = 4		; Feature is a string and F.FCV is the length
   229									;   current value begins at F.FCV+1
   230									; Std value(if any) begins at F.FCV+1+(F.FCV)
   231		000010				FB.STE = 10		; Standard value exists
   232		000020				FB.SST = 20		; Standard is set
   233		000040				FB.CP = 40		; Change pending
   234		000100				FB.CA = 100		; Change allowed
   235		000001			F.FCV = 1			; Feature current value byte
   236		000002			F.FSV = 2			; Feature standard value byte
   237
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 3-2
LE.M11    30-DEC-82 03:53		LE DATA BASE OFFSETS

   238	000213	000001			LE.DAT::.blkb	1			; Data mode
   239		000131				LEDATS== FB.CL1!FB.SST!FB.STE!FB.CA ; Initial status of LE.DOF & LE.DAT
   240	000214	000001				.blkb	1			; ASCII
   241	000215	000001				.blkb	1			; ASCII is standard
   242	000216	000001			LE.LCR::.blkb	1			; Lower case raise
   243		000100				LELCRS== FB.CL0!FB.CA		; Initial status of LE.LCR
   244	000217	000001				.blkb	1			; Off
   245	000220	000001			LE.FWD::.blkb	1			; Form width
   246	000221	000001				.blkb	1
   247	000222	000001			LE.TRN::.blkb	1			; Record truncation
   248		000130				LETRNS== FB.CL0!FB.CA!FB.SST!FB.STE ; Initial status of LE.TRN
   249	000223	000001				.blkb	1			; Off
   250	000224	000001				.blkb	1			; Off is standard
   251	000225	000001			LE.DWD::.blkb	1			; Device width
   252	000226	000001				.blkb	1			; Standard width
   253
   254					; Device specific features
   255	000227	000001			LE.HT::	.blkb	1			; Horizontal tab
   256		000031				LEHTS== FB.CL1!FB.SST!FB.STE	; Initial status of LE.HT
   257	000230	000001				.blkb	1			; Standard tabs on
   258	000231	000001				.blkb	1
   259	000232	000001			LE.SFC::.blkb	1			; Standard VFU
   260		000030				LESFCS== FB.CL0!FB.SST!FB.STE	; Initial status of LE.SFC
   261	000233	000001				.blkb	1			; On
   262	000234	000001				.blkb	1
   263	000235	000001			LE.FCC::.blkb	1			; Fortran carriage control
   264		000130				LEFCCS== FB.CL0!FB.CA!FB.SST!FB.STE ; Initial status of LE.FCC
   265	000236	000001				.blkb	1			; Off
   266	000237	000001				.blkb	1
   267	000240	000001			LE.CHS::.blkb	1			; Character set
   268	000241	000001				.blkb	1			; 96 Character ASCII
   269	000242	000001			LE.PLE::.blkb	1			; Page limit enforcement
   270		000133				LEPLES== FB.CL1!FB.WRD!FB.CA!FB.SST!FB.STE ; Initial status of LE.PLE
   271	000243	000001				.blkb	1			; Page counter
   272	000244	000002				.blkb	2			; Standard = 0 => Off
   273
   274	000246					END$
   275
   276		000000'			.psect	$CODE$,I,RO
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 4
LE.M11    30-DEC-82 03:53		START / STOP DEVICE  (FC.CTL)

   278					.sbttl	Start / Stop Device  (FC.CTL)
   279					;+
   280					; Initialize unit
   281					;	R4	CCB
   282					;	R5	Database
   283					;-
   284	000000'				DVOPEN:	PUSH$S	R4			; Save incoming CCB pointer
   285	000002'	032765	000001	000056		BIT	#LA.CLO,L.ASTS(R5)	; Closed?
   286	000010'	001550				BEQ	101$			; No, then how can it be opened?
   287	000012'	116465	000011	000001		MOVB	C.PIX(R4),L.NRD(R5)	; Remember NRD's PIX
   288	000020'	005075	000002			CLR	@L.CSR(R5)		; Be very pessimistic
   289	000024'	005065	000056			CLR	L.ASTS(R5)		; Zap the action status word
   290	000030'	005065	000064			CLR	L.PUBS(R5)		; Flush current print buffer
   291	000034'	105065	000044			CLRB	L.DTXL(R5)		; Nothing waiting
   292	000040'	005065	000132			CLR	L.DMAD(R5)		; Flush source buffer in use
   293	000044'	005065	000134			CLR	L.DMAD+2(R5)
   294	000050'	005065	000136			CLR	L.DMBS(R5)
   295	000054'	105065	000123			CLRB	L.DMSQ(R5)		; The data message sequence number
   296	000060'	005065	000160			CLR	L.MSGA(R5)		; Current out message
   297	000064'	005065	000162			CLR	L.MSGA+2(R5)
   298	000070'	005065	000164			CLR	L.MSGS(R5)
   299	000074'	005065	000100			CLR	L.IOCN(R5)		; OUTSTANDING IO COUNT
   300	000100'	005065	000102			CLR	L.IOWT(R5)		; CLOSE-WAIT FLAG
   301	000104'	105065	000077			CLRB	L.HUNG(R5)		; HUNG DEVICE TIMER
   302	000110'	105065	000110			CLRB	L.RECO(R5)		; CONTROL RESOURCE ERROR FLAG
   303	000114'	105065	000111			CLRB	L.RATT(R5)		; PENDING ATTENTION MESSAGE FLAG
   304	000120'	105065	000112			CLRB	L.CAPP(R5)		; PENDING CAPABILITIES MESSAGE FLAG
   305	000124'	005065	000072			CLR	L.PGCT(R5)		; THE PAGE COUNTER
   306	000130'	012700	000177			MOV	#DEL,R0			; INITIALIZE LP11 XLATION TABLE
   307	000134'	105060	007720'			CLRB	LEASC(R0)		; SUPPRESS DEL
   308	000140'	005300				DEC	R0
   309
   310	000142'	110060	007720'		10$:	MOVB	R0,LEASC(R0)		; MOST OF TABLE IS ASCII TO ASCII
   311	000146'	077003				SOB	R0,10$
   312	000150'	012700	000037			MOV	#US,R0			; SUPPRESS CONTROL CODES
   313
   314	000154'	105060	007720'		12$:	CLRB	LEASC(R0)
   315	000160'	077003				SOB	R0,12$
   316	000162'	105067	007532			CLRB	LEASC			; SUPPRESS NUL
   317	000166'	012700	010120'			MOV	#FCXTB,R0		; GET ADDRESS OF EXCEPTION TABLE
   318	000172'	112001			15$:	MOVB	(R0)+,R1		; GET LEASC OFFSET
   319	000174'	100403				BMI	20$			; DONE IF BYTE NEGATIVE
   320	000176'	112061	007720'			MOVB	(R0)+,LEASC(R1)	; STUFF IN REPLACEMENT DATA
   321	000202'	000773				BR	15$ 
   322
   323					; Set all features with standards to standard
   324	000204'	012700	000166		20$:	MOV	#L.CFET,R0		; COMMON FEATURES
   325	000210'	004767	000126			CALL	200$			; DO ALL
   326	000214'	012700	000200			MOV	#L.DFET,R0		; DEVICE SPECIFIC FEATURES
   327	000220'	004767	000116			CALL	200$			; ALL OF THEM TOO
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 5
LE.M11    30-DEC-82 03:53		START / STOP DEVICE  (FC.CTL)

   329					; INIT PHYSICAL BUFFER POOL
   330	000224'	012700	000006			MOV	#LEPBFS,R0		; RESERVE SEVERAL
   331	000230'	004767	000000G		55$:	CALL	$RDBGT			; GET A PHYSICAL BUFFER
   332	000234'	103414				BCS	70$			; LOSE
   333	000236'	005064	000014			CLR	C.STS(R4)		; INIT STATUS
   334	000242'	005064	000004			CLR	C.STK(R4)		; CLEAR CCB POINTER
   335	000246'	105064	000011			CLRB	C.PIX(R4)	 	; MARK THE CCB AS STRICTLY LOCAL
   336	000252'					ENQ$	L.PLBQ			; QUEUE THE BUFFER TO THE FREE LIST
   337	000264'	077017				SOB	R0,55$
   338
   339	000266'	005765	000140		70$:	TST	L.PLBQ(R5)		; FAIL TO OPEN IF NONE AVAILABLE
   340	000272'	001414				BEQ	100$
   341	000274'	005065	000144			CLR	L.PLBP(R5)		; INIT PHYSICAL BUFFER IN USE
   342	000300'	005065	000146			CLR	L.PLBP+2(R5)
   343	000304'	005065	000150			CLR	L.PLBS(R5)
   344	000310'	012703	000001			MOV	#S.SSUC,R3		; RETURN SUCCESS
   345	000314'	105215				INCB	(R5)			; START THE TIMER
   346	000316'	004767	000000G			CALL	$LTMEN			; ...
   347	000322'	000405				BR	104$
   348
   349	000324'	052765	000001	000056	100$:	BIS	#LA.CLO,L.ASTS(R5)	; NOTE REMAINING CLOSED
   350	000332'	012703	177754		101$:	MOV	#S.ERBO,R3		; FAILED TO OPEN
   351
   352	000336'				104$:	POP$S	R4			; RESTORE POINTER FOR COMMAND CCB
   353	000340'	000474				BR	CTLXIT			; Leave
   354
   355
   356					; Feature setting routine
   357	000342'	060500			200$:	ADD	R5,R0			; R0/FEATURE LIST OFFSET
   358	000344'	005001				CLR	R1
   359	000346'	152001				BISB	(R0)+,R1		; GET NO. OF FEATURES
   360	000350'	005003			210$:	CLR	R3
   361	000352'	152003				BISB	(R0)+,R3		; GET ADDRESS OF FEATURE BLOCK
   362	000354'	001403				BEQ	220$			; EMPTY SLOT
   363	000356'	060503				ADD	R5,R3
   364	000360'	004767	003320			CALL	SETSTD			; SET IT TO STANDARD
   365	000364'	077107			220$:	SOB	R1,210$
   366	000366'				NOOP:	RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 6
LE.M11    30-DEC-82 03:53		START / STOP DEVICE  (FC.CTL)

   368					;+
   369					; Stop unit
   370					;
   371					;	R4	CCB
   372					;	R5	Database
   373					;-
   374
   375	000370'				DVCLOS:	PUSH$S	R4			; SAVE COMMAND CCB POINTER
   376	000372'	004767	006324			CALL	$LESTP			; CLEAR PRINTER (SCREECHING HALT)
   377	000376'	105015				CLRB	(R5)			; Stop timer
   378	000400'	052765	000001	000056		BIS	#LA.CLO,L.ASTS(R5)	; MARK AS CLOSED
   379	000406'	004767	005020			CALL	Q$PURG			; FLUSH THE QUEUES
   380
   381	000412'				10$:	DEQ$	L.PLBQ,20$		; Get next physical buffer from queue
   382	000432'	004767	000000G			CALL	$RDBRT			; Return it to system
   383	000436'	000765				BR	10$			; Continue
   384
   385	000440'				20$:	DEQ$	L.CMSQ,30$		; FLUSH ANY OUTSTANDING CONTROL MESSAGES
   386	000460'	112764	000004	000012		MOVB	#FC.RCE,C.FNC(R4)	;  and return them
   387	000466'	004767	000000G			CALL	$SCHED			;   ...
   388	000472'	000762				BR	20$
   389
   390	000474'				30$:	POP$S	R4			; RESTORE COMMAND CCB POINTER
   391	000476'	010465	000102			MOV	R4,L.IOWT(R5)		; SET CLOSE WAIT FLAG
   392
   393					; Complete close only when all CCB'S returned
   394	000502'	005765	000100		STOPWT:	TST	L.IOCN(R5)
   395	000506'	001402				BEQ	10$
   396	000510'	105215				INCB	(R5)			; Restart timer
   397	000512'					RETURN
   398
   399	000514'	105015			10$:	CLRB	(R5)			; STOP THE CLOCK
   400	000516'	016504	000102			MOV	L.IOWT(R5),R4		; GET THE CLOSE CCB BACK
   401	000522'	005065	000102			CLR	L.IOWT(R5)		; COVER OUR TRACKS
   402	000526'	012703	000001			MOV	#S.SSUC,R3
   403
   404	000532'	010364	000014		CTLXIT:	MOV	R3,C.STS(R4)		; Set status
   405	000536'	112764	000022	000012		MOVB	#FC.CCP,C.FNC(R4)	;   and function for completion
   406	000544'					CALLR	$SCHED			; Leave
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 7
LE.M11    30-DEC-82 03:53		TIMER HANDLER  (FC.TIM)

   408					.sbttl	Timer handler  (FC.TIM)
   409					;+
   410					;	R5	Database address
   411					;-
   412
   413	000550'	005765	000102		CLOCK:	TST	L.IOWT(R5)		; CHECK FOR CLOSE WAIT
   414	000554'	001352				BNE	STOPWT			; PREEMPTS ALL ELSE
   415	000556'	105765	000110			TSTB	L.RECO(R5)		; CHECK CONTROL RESOURCE ERROR
   416	000562'	001404				BEQ	10$
   417	000564'	105065	000110			CLRB	L.RECO(R5)		; YES - FLUSH THE FLAG
   418	000570'	004767	001012			CALL	MSGFIN			; RESTART THE PROCESS
   419
   420	000574'	105765	000044		10$:	TSTB	L.DTXL(R5)		; Anything waiting for tick?
   421	000600'	001402				BEQ	20$			; Appears not
   422	000602'	004767	006002			CALL	ZZ$WAK			; Yes, resume it - it will return here
   423
   424	000606'	032765	000200	000056	20$:	BIT	#LA.ERR,L.ASTS(R5)	; CHECK DEVICE PROBLEMS
   425	000614'	001411				BEQ	30$			; NOT BECAUSE OF DEVICE ERROR
   426	000616'	005775	000002			TST	@L.CSR(R5)		; DEVICE ERROR WAS REASON
   427	000622'	100406				BMI	30$			; STILL HAVING PROBLEMS
   428	000624'	004767	005244			CALL	SN$ALR			; CURE HAS BEEN EFFECTED, NOTIFY USER
   429	000630'	103403				BCS	30$			; COULDN'T SEND ONE, COME BACK LATER
   430	000632'	042765	000200	000056		BIC	#LA.ERR,L.ASTS(R5)	; FLUSH ERROR BUT LEAVE LA.PAU
   431										; USER MUST RESUME
   432
   433	000640'	105765	000077		30$:	TSTB	L.HUNG(R5)		; CHECK HUNG TIMER
   434	000644'	001414				BEQ	50$			; NOT SET
   435	000646'	105365	000077			DECB	L.HUNG(R5)		; COUNT THE TOCK
   436	000652'	001011				BNE	50$			; STILL OK
   437	000654'	052765	004000	000056		BIS	#LA.TMO,L.ASTS(R5)	; DEVICE IS COMATOSE
   438	000662'	105765	000111			TSTB	L.RATT(R5)		; CHECK PENDING ATTENTION MESSAGE
   439	000666'	001006				BNE	55$			; YES - DON'T GENERATE ANOTHER
   440	000670'	112765	000001	000111		MOVB	#N.ASTC,L.RATT(R5)	; SET PENDING ATTENTION FLAG
   441										;   (REASON CODE)
   442
   443	000676'	105765	000111		50$:	TSTB	L.RATT(R5)		; CHECK PENDING ATTENTION MESSAGE
   444	000702'	001402				BEQ	60$
   445	000704'	004767	005232		55$:	CALL	SN$ATT			; TRY TO SEND ONE
   446	000710'	105765	000112		60$:	TSTB	L.CAPP(R5)		; CHECK PENDING CAPABILITIES MESSAGE
   447	000714'	001402				BEQ	70$
   448	000716'	004767	005456			CALL	SN$CAP			; TRY TO SEND ONE
   449	000722'	105215			70$:	INCB	(R5)			; RESET THE CLOCK FOR NEXT TOCK
   450	000724'					RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 8
LE.M11    30-DEC-82 03:53		RESOURCE RETURN

   452					.sbttl	Resource Return
   453					;+
   454					; Resource return
   455					;-
   456	000726'	005365	000100		LEDONE:	DEC	L.IOCN(R5)		; COUNT THE RETURNED RESOURCE
   457	000732'	002002				BGE	10$
   458	000734'	005065	000100			CLR	L.IOCN(R5)		; BLEW IT SOMEWHERE
   459	000740'	012701	000120		10$:	MOV	#80.,R1			; SET SIZE OF RETURNING BUFFER
   460	000744'					CALLR	$CBBRT			; SEND IT BACK, AND CCB TOO
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 9
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   462					.sbttl	Message Received  (FC.RCP)
   463					;+
   464					; Dispatch according to the type of NURD message connected to the
   465					; current CCB chain, which consists of but a single message.
   466					;
   467					;  Inputs:	R4 - Points to first (or only) CCB in chain
   468					;		R5 - Points to LE data base
   469					;
   470					;  Outputs:	Dispatches to message handler, or returns an
   471					;		error if the type is illegal or out of range.
   472					;		The called routine is responsible for queuing
   473					;		messages to be returned to the higher level.
   474					;
   475					;  Message Format:	<msgtype><msgflgs><msgtxt.....>
   476					;-
   477
   478	000750'	032765	000001	000056	LEDSP:	BIT	#LA.CLO,L.ASTS(R5)	; DEVICE CLOSED?
   479	000756'	001031				BNE	60$			; YES, HENCE INACCESSIBLE
   480	000760'					MAP$	C.BUF(R4)		; GET MAPPING
   481	000766'	016400	000020			MOV	C.BUF+2(R4),R0		; POINT TO CCB DATA BUFFER
   482	000772'	111001				MOVB	(R0),R1			; GET NURD MESSAGE TYPE
   483	000774'	042701	177760			BIC	#^C<NM.TYP>,R1		; ISOLATE JUST MESSAGE TYPE
   484	001000'	020127	000004			CMP	R1,#NRDOTR		; TYPE OUT OF RANGE?
   485	001004'	103402				BLO	30$			; NO, OKAY TO DISPATCH
   486	001006'	012701	000004			MOV	#NRDOTR,R1		; YES, SPECIFY ILLEGAL NURD HANDLER
   487	001012'	006301			30$:	ASL	R1			; GET WORD OFFSET
   488	001014'					CALLR	@40$(R1)		; DISPATCH TO MESSAGE PROCESSOR
   489										;   AND RETURN
   490
   491
   492	001020'				40$:	DSP$B
   493	001020'					DSP$	,MSGDAT			;  0 - DATA MESSAGE
   494	001022'					DSP$	,50$			;  1 - ATTENTION (ILLEGAL IF REC'D)
   495	001024'					DSP$	,MSGDAT			;  2 - FEATURES MESSAGE
   496	001026'					DSP$	,MSGCTL			;  3 - CONTROL MESSAGE
   497		000004			  NRDOTR = <.-40$>/2
   498	001030'					DSP$	,50$			;  N - ILLEGAL NURD TYPE SPEC
   499	001032'					DSP$E
   500
   501	001032'	012764	177762	000014	50$:	MOV	#S.EIDM,C.STS(R4)
   502	001040'	000403				BR	70$
   503	001042'	012764	177767	000014	60$:	MOV	#S.EABO,C.STS(R4)
   504	001050'	112764	000004	000012	70$:	MOVB	#FC.RCE,C.FNC(R4)
   505	001056'					CALLR	$SCHED
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 10
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   507					;+
   508					; Queue Incoming NURD Data, Control and Features Messages
   509					;
   510					;	R4	CCB to queue
   511					;	R5	Database address
   512					;-
   513
   514	001062'	032765	000010	000056	MSGDAT:	BIT	#LA.ABO,L.ASTS(R5)	; Check for abort state
   515	001070'	001410				BEQ	MSGQUE			; Ok to proceed
   516	001072'	012764	177767	000014		MOV	#S.EABO,C.STS(R4)	; Aborting
   517	001100'	112764	000004	000012	MSGX:	MOVB	#FC.RCE,C.FNC(R4)	; ...
   518	001106'					CALLR	$SCHED
   519
   520	001112'				MSGQUE:	ENQ$	L.DLCQ
   521	001124'	020465	000116			CMP	R4,L.DLCQ(R5)		; Was queue empty ?
   522	001130'	001022				BNE	35$			; No, routines of interest are working
   523	001132'	105765	000044			TSTB	L.DTXL(R5)		; Maybe waiting for packet ?
   524	001136'	001017				BNE	35$			; Could be
   525
   526	001140'	010665	000046		30$:	MOV	SP,L.DFSP(R5)		; Set the stack origin for this process
   527	001144'	004767	004466			CALL	RD$BYT			; Extract message type
   528	001150'	010001				MOV	R0,R1
   529	001152'	004767	004460			CALL	RD$BYT			; Extract message flags
   530	001156'	010065	000122			MOV	R0,L.MFLG(R5)
   531	001162'	006301				ASL	R1			; Make a dispatch
   532	001164'	004771	001200'			CALL	@40$(R1)		;   and go
   533	001170'	016504	000116			MOV	L.DLCQ(R5),R4		; Get next message
   534	001174'	001361				BNE	30$			; ...
   535	001176'				35$:	RETURN				; Done
   536
   537	001200'				40$:	DSP$B
   538	001200'					DSP$	,DATSYN			;  0 - Data message
   539	001202'					DSP$	,MSGX			;  1 - Attention (illegal if rec'd)
   540	001204'					DSP$	,FTRSYN			;  2 - Features message
   541	001206'					DSP$	,CTLSYN			;  3 - Control message
   542	001210'					DSP$E
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 11
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   544					;+
   545					; NURD Data Message Handler
   546					;
   547					; Virtual (NURD) to physical (LP11) data translation.
   548					; Unload NURD buffer into physical buffer and ship physical buffers
   549					; down to driver as they are filled, saving virtual machine buffer
   550					; address in C.PRM5 of the physical buffer until the corresponding
   551					; physical data has been output or aborted.
   552					;
   553					; This routine is called from MSGDAT at the main entry, and entered at
   554					; various recovery points, depending upon the nature of the failure
   555					; which caused the suspension.
   556					;
   557					; Source buffer has been set up and NURD type and message flag bytes
   558					; (1st & 2nd bytes) have been extracted.
   559					;
   560					;	R4	CCB
   561					;	R5	Database address
   562					;
   563					;	Data message format:	<seq no.><flgs><seg cnt><segs......>
   564					;	Data seg format:	<cnt><txt....> or <sign+cnt><repeat char>
   565					;-
   566
   567	001210'	004767	004422		DATSYN:	CALL	RD$BYT			; GET SEQUENCE NUMBER
   568	001214'	110065	000123			MOVB	R0,L.DMSQ(R5)		; SAVE THE CURRENT SEQ NUMBER
   569	001220'	004767	004412			CALL	RD$BYT			; GET THE FLAGS BYTE
   570	001224'	032700	000001			BIT	#ND.ACK,R0		; CHECK FOR ACK REQ'D
   571	001230'	001403				BEQ	14$			; NO ACK REQUEST
   572	001232'	052765	000100	000056		BIS	#LA.AKR,L.ASTS(R5)	; NOTE ACK REQUESTED
   573	001240'	032700	000004		14$:	BIT	#ND.EOF,R0		; CHECK FOR EOF
   574	001244'	001403				BEQ	16$
   575	001246'	052765	000400	000056		BIS	#LA.EOF,L.ASTS(R5)	; SET THIS MESSAGE HAS EOF
   576	001254'	004767	004356		16$:	CALL	RD$BYT			; GET SEGMENT COUNT BYTE
   577	001260'	110065	000124			MOVB	R0,L.DMSG(R5)		; SAVE THE SEGMENT COUNT OF MESSAGE
   578	001264'	001500				BEQ	60$			; EMPTY MESSAGE, SKIP DATA PROCESSING
   579
   580					; Process message data
   581	001266'	004767	004344		20$:	CALL	RD$BYT			; GET NEXT SEGMENT HDR BYTE
   582	001272'	105700				TSTB	R0			; DISPATCH BASED ON SEGMENT TYPE
   583	001274'	100410				BMI	28$			; THIS IS A COMPRESSED SEGMENT
   584	001276'	003017				BGT	32$			; THIS IS A NORMAL DATA SEGMENT
   585					; This is an EOR
   586	001300'	105765	000236			TSTB	LE.FCC+F.FCV(R5)	; IS FORTRAN CARRIAGE CONTROL SET?
   587	001304'	001403				BEQ	24$			; NO, EOR IS THEN NOT SIGNIFICANT
   588	001306'	052765	001000	000056		BIS	#LA.EOR,L.ASTS(R5)	; YES, SET EOR TO FLAG NEXT CHAR AS CC
   589	001314'	000461			24$:	BR	56$			; PROCESS END OF SEGMENT
   590
   591					; Process compressed data segment
   592	001316'	112765	000001	000125	28$:	MOVB	#1,L.DMSS(R5)		; Set segment size to one character
   593	001324'	042700	177600			BIC	#177600,R0		; Isolate repeat count
   594	001330'	010065	000130			MOV	R0,L.DMCR(R5)		;  and save it
   595	001334'	000404				BR	36$			; Process data in normal way
   596
   597					; Process normal data segment
   598	001336'	110065	000125		32$:	MOVB	R0,L.DMSS(R5)		; Set segment size
   599	001342'	005065	000130			CLR	L.DMCR(R5)		; No repeat count
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 11-1
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   600
   601					;Normal segment processor
   602	001346'	004767	004264		36$:	CALL	RD$BYT			; Get character data byte from message
   603	001352'	042700	177600			BIC	#^C177,R0		; SAVE ONLY LOW SEVEN BITS OF CHARACTER
   604	001356'	116000	007720'			MOVB	LEASC(R0),R0		; GET MAPPED VALUE OF THE CHARACTER
   605	001362'	110065	000152			MOVB	R0,L.PBRC(R5)		; SAVE A COPY OF THE CHARACTER
   606
   607	001366'	005000			40$:	CLR	R0			; GET THE BYTE BACK
   608	001370'	156500	000152			BISB	L.PBRC(R5),R0
   609	001374'	032765	001000	000056		BIT	#LA.EOR,L.ASTS(R5)	; END OF RECORD ON?
   610	001402'	001406				BEQ	42$			; NO, PROCEED WITHOUT INCIDENT
   611										; YES, BYTE IS FORTRAN CARRIAGE CHAR
   612	001404'	004767	002562			CALL	FORM$F			; HANDLE FORTRAN CARRIAGE CONTROL
   613	001410'	042765	001000	000056		BIC	#LA.EOR,L.ASTS(R5)	; FLUSH END OF RECORD
   614	001416'	000410				BR	52$			; OKAY, DO NEXT BYTE
   615
   616	001420'	105700			42$:	TSTB	R0			; CHECK FOR CHARACTER TYPE
   617	001422'	001411				BEQ	54$			; IGNORE CHARACTERS MAPPED TO ZERO
   618	001424'	100003				BPL	44$			; DIRECTLY TRANSMIT PRINTING CHARACTERS
   619
   620					; MANIPULATIONS REQ'D ON FORMS CONTROL CHARS
   621	001426'	004767	003110			CALL	FORM$X			; DO FORMS CONTROL TRANSLATION
   622	001432'	000402				BR	52$			; SUCCEEDED, CONTINUE CURRENT PROCESSING
   623
   624	001434'	004767	003274		44$:	CALL	PR$CHR			; STUFF RESULTING CHAR TO OUTPUT
   625	001440'	005365	000130		52$:	DEC	L.DMCR(R5)		; DECREMENT CHAR REPEAT COUNT
   626	001444'	003350				BGT	40$			; MORE TO DO ON CURRENT CHAR
   627
   628	001446'	005065	000130		54$:	CLR	L.DMCR(R5)		; KEEP REPEAT CNT = 0
   629	001452'	105365	000125			DECB	L.DMSS(R5)		; DECREMENT SEGMENT SIZE
   630	001456'	001333				BNE	36$			; SEGMENT NOT EMPTY, GET NEXT CHAR
   631
   632					; SEGMENT FINISHED, CLEAN UP
   633	001460'	105365	000124		56$:	DECB	L.DMSG(R5)		; DECREMENT COUNT OF SEGMENTS
   634	001464'	001300				BNE	20$			; NOT DONE, GO BACK FOR NEXT SEGMENT
   635
   636					; Message complete, drop into end-of-message code
   637	001466'	016504	000140		60$:	MOV	L.PLBQ(R5),R4		; GET PHYSICAL BUFFER CCB ADDRESS
   638	001472'	001403				BEQ	86$
   639	001474'	016564	000056	000014		MOV	L.ASTS(R5),C.STS(R4)	; MARK PHYSICAL BUF
   640	001502'	004767	004274		86$:	CALL	RD$DQX			; PURGE
   641	001506'	042765	000500	000056		BIC	#LA.EOF!LA.AKR,L.ASTS(R5) ; CLEAR SAVED DATA FLAGS
   642	001514'					RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 12
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   644					;+
   645					; NURD Control Message Handler
   646					;
   647					; Called from LEDSP
   648					;
   649					;	R0	Buffer pointer to NURD message type
   650					;	R4	CCB
   651					;	R5	Database
   652					;	KISAR6	Mapped to buffer
   653					;
   654					; Control message format: <seq no.><command><result>
   655					;-
   656
   657					.enabl	lsb
   658
   659	001516'	122764	000004	000013	MSGCTL:	CMPB	#S$INT,C.MOD(R4)	; CHECK FOR INTERRUPT MESSAGE
   660	001524'	001402				BEQ	10$			; Tis
   661	001526'					CALLR	MSGQUE			; OTHERS ARE SYNCH'D WITH DATA STREAM
   662
   663	001532'				10$:	ENQ$	L.CMSQ			; QUEUE THE CCB FOR LATER
   664	001544'	022764	000004	000022		CMP	#N.CCMD+1,C.CNT(R4)	; CHECK TO SEE IF ENOUGH SENT
   665	001552'	003074				BGT	100$			; NOT EVEN 4 LOUSY BYTES!
   666	001554'	116001	000003			MOVB	N.CCMD(R0),R1		; GET CONTROL COMMAND BYTE
   667	001560'	003471				BLE	100$			; SKIP OUT ON ILLEGAL CODE
   668	001562'	022701	000012			CMP	#CTLLEN,R1		; CHECK RANGE OF COMMAND
   669	001566'	101466				BLOS	100$			; OUT OF RANGE, SKIP OUT
   670	001570'	006301				ASL	R1			; IN RANGE, GET AS WORD OFFSET
   671	001572'	005000				CLR	R0			; INIT COMPLETION CODE
   672	001574'	004771	002024'			CALL	@CTLDSP(R1)		; EXECUTE DETAILED CONTROL ROUTINE
   673	001600'	020027	177777			CMP	R0,#-1			; MORE TO DO ?
   674	001604'	001405				BEQ	15$			; NO
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 13
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   676					;+
   677					; Here when finished, or when performing a retry to get a resource
   678					;-
   679	001606'	004767	002304		MSGFIN:	CALL	BF$SDB			; GET A RESPONSE BUFFER
   680	001612'	103003				BCC	20$			; OK
   681	001614'	105265	000110			INCB	L.RECO(R5)
   682	001620'				15$:	RETURN
   683	001622'				20$:	PUSH$S	R4			; SAVE THE RESPONSE CCB
   684	001624'					DEQ$	L.CMSQ			; GET THE MESSAGE CCB BACK
   685	001642'					MAP$	C.BUF(R4)		; R0/RESULT
   686	001650'	016401	000020			MOV	C.BUF+2(R4),R1
   687	001654'	116102	000003			MOVB	N.CCMD(R1),R2		; R2/COMMAND
   688	001660'	116101	000002			MOVB	N.CSEQ(R1),R1		; R1/SEQ NO. OF CONTROL MESSAGE
   689	001664'	112764	000004	000012		MOVB	#FC.RCE,C.FNC(R4)	; ACK the control message
   690	001672'	004767	000000G			CALL	$SCHED			; ...
   691	001676'					POP$S	R4			; GET THE RESPONSE CCB BACK
   692	001700'					MAP$	C.BUF(R4)		; MAP TO THE BUFFER
   693	001706'	016403	000020			MOV	C.BUF+2(R4),R3		; GET BUF PTR
   694	001712'	112723	000003			MOVB	#NM.CTL,(R3)+		; FORMAT A NURD CONTROL MESSAGE
   695	001716'	105023				CLRB	(R3)+			; NO MESSAGE FLAGS
   696	001720'	110123				MOVB	R1,(R3)+		; SEQ NO.
   697	001722'	110223				MOVB	R2,(R3)+		; COMMAND
   698	001724'	110013				MOVB	R0,(R3)			; RESULT
   699	001726'	012764	000005	000022		MOV	#N.CRES+1,C.CNT(R4)	; SET THE BUFFER COUNT
   700	001734'	005265	000100			INC	L.IOCN(R5)		; Count the I/O
   701	001740'					CALLR	$SCHED			; Queue it and return
   702
   703					; Illegal function
   704	001744'				100$:	DEQ$	L.CMSQ			; Get the CCB back
   705	001762'	012764	177754	000014		MOV	#S.ERBO,C.STS(R4)	; Reject this one
   706	001770'	112764	000004	000012		MOVB	#FC.RCE,C.FNC(R4)	; ...
   707	001776'	004767	000000G			CALL	$SCHED			; ...
   708	002002'	004767	004714			CALL	$LESTP			; Turn off the device
   709	002006'	052765	000004	000056		BIS	#LA.ADN,L.ASTS(R5)	; Abort when print queue done
   710	002014'	012700	177777			MOV	#-1,R0			; Say we were here
   711	002020'					CALLR	$LESTR			; Turn on printer so it can die
   712
   713					;+
   714					; The NURD control dispatch table
   715					;-
   716	002024'	001744'			CTLDSP:	.word	100$		;  0 - CODE ZERO IS RESERVED
   717	002026'	002322'				.word	CTLABE		;* 1 - ABORT TO END OF FILE
   718	002030'	002330'				.word	CTLABT		;* 2 - ABORT ALL
   719	002032'	002274'				.word	CTLABC		;  3 - ABORT CLEAR
   720	002034'	002566'				.word	CTLSTS		;  4 - STATUS REQUESTED, SEND ATTENTION
   721	002036'	002406'				.word	CTLDMP		;  5 - DUMP OUTPUT BUFFERS
   722	002040'	002436'				.word	CTLPAU		;* 6 - PAUSE
   723	002042'	002512'				.word	CTLRSM		;* 7 - RESUME FROM ERROR OR PAUSE
   724	002044'	001744'				.word	100$		;  8 - UNDEFINED
   725	002046'	002400'				.word	CTLCPB		;  9 - SEND CAPABILITIES MESSAGE
   726		000012			  CTLLEN = <. - CTLDSP>/2	;* = special action taken
   727					.dsabl	lsb
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 14
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   729					;+
   730					; Non-interrupt control message processing
   731					;-
   732	002050'	004767	003562		CTLSYN:	CALL	RD$BYT			; GET SEQ NO.
   733	002054'	110065	000123			MOVB	R0,L.DMSQ(R5)		; SAVE IT FOR RESPONSE
   734	002060'	004767	003552			CALL	RD$BYT			; GET COMMAND
   735	002064'	010001				MOV	R0,R1
   736	002066'	022701	000012			CMP	#CTLLEN,R1		; CHECK RANGE OF COMMAND
   737	002072'	101470				BLOS	50$			; OUT OF RANGE, SKIP OUT
   738	002074'					PUSH$S	R1			; SAVE COMMAND CODE FOR RESPONSE
   739	002076'	006301				ASL	R1			; IN RANGE, GET AS WORD OFFSET
   740	002100'	005000				CLR	R0			; INIT COMPLETION FLAG
   741	002102'	004771	002024'			CALL	@CTLDSP(R1)		; Do it - return with R0 = result code
   742	002106'					POP$S	R1			; GET COMMAND CODE BACK
   743	002110'	020027	177777			CMP	R0,#-1			; MORE TO DO ?
   744	002114'	001466				BEQ	60$			; NO
   745	002116'					PUSH$S	R0			; SAVE RESPONSE CODE
   746	002120'	004767	003656			CALL	RD$DQX			; Complete the message
   747	002124'	012700	000003			MOV	#NM.CTL,R0		; CONSTRUCT A CONTROL MESSAGE
   748	002130'	004767	002414			CALL	MS$BYT			; CONTROL CODE
   749	002134'	005000				CLR	R0
   750	002136'	004767	002406			CALL	MS$BYT			; NULL MESSAGE FLAGS
   751	002142'	116500	000123			MOVB	L.DMSQ(R5),R0
   752	002146'	004767	002376			CALL	MS$BYT			; SEQ NO. OF ORIGINAL COMMAND
   753	002152'	010100				MOV	R1,R0
   754	002154'	004767	002370			CALL	MS$BYT			; COMMAND
   755	002160'					POP$S	R0
   756	002162'	004767	002362			CALL	MS$BYT			; RESPONSE CODE
   757	002166'					DEQ$	L.MSGQ			; GET BUFFER OFF QUEUE
   758	002204'	166564	000164	000022		SUB	L.MSGS(R5),C.CNT(R4)	; SET MESSAGE SIZE
   759	002212'	005265	000100			INC	L.IOCN(R5)		; ONE MORE OUTSTANDING I/O
   760	002216'	004767	000000G			CALL	$SCHED			; SEND IT
   761	002222'	005065	000164			CLR	L.MSGS(R5)		; CLEAN UP TRACKS
   762	002226'	105765	000111			TSTB	L.RATT(R5)		; CHECK FOR OTHER MESSAGES TO GO OUT
   763	002232'	001402				BEQ	20$			; NO ATTENTION MESSAGES
   764	002234'	004767	003702			CALL	SN$ATT			; PENDING ATTENTION MESSAGE
   765
   766	002240'	105765	000112		20$:	TSTB	L.CAPP(R5)		; TRY CAPABILITIES MESSAGE
   767	002244'	001001				BNE	30$
   768	002246'					RETURN
   769	002250'				30$:	CALLR	SN$CAP			; PENDING CAPABILITIES MESSAGE
   770
   771	002254'	004767	004442		50$:	CALL	$LESTP			; FLUSH THE DEVICE INTERRUPTS
   772	002260'	052765	000004	000056		BIS	#LA.ADN,L.ASTS(R5)	; ABORT LINK WHEN PRINT QUEUE DONE
   773	002266'	004767	003510			CALL	RD$DQX			; Ack the message
   774	002272'				60$:	RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 15
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   776					;+
   777					; Clear ABORT status
   778					;-
   779	002274'	032765	000030	000056	CTLABC:	BIT	#LA.ABE!LA.ABO,L.ASTS(R5) ; ABORT SET?
   780	002302'	001404				BEQ	10$			; NO
   781	002304'	042765	000030	000056		BIC	#LA.ABE!LA.ABO,L.ASTS(R5) ; CLEAR ABORTING
   782	002312'					RETURN
   783
   784	002314'	012700	000001		10$:	MOV	#NR.ACN,R0		; NOT IN ABORT STATE
   785	002320'					RETURN
   786
   787					;+
   788					; Abort to end of file
   789					;-
   790	002322'	012700	000002		CTLABE:	MOV	#NR.NOE,R0		; EOF NOT DEFINED FOR OUTPUT DEVICE
   791	002326'					RETURN
   792
   793					;+
   794					; Abort until clear received
   795					;-
   796	002330'	004767	004366		CTLABT:	CALL	$LESTP			; FLUSH THE DEVICE
   797	002334'	052765	000010	000056		BIS	#LA.ABO,L.ASTS(R5)	; NOTE ABORTING
   798	002342'	016501	000066			MOV	L.DDMQ(R5),R1		; CHECK ALL QUEUES
   799	002346'	056501	000146			BIS	L.PLBP+2(R5),R1
   800	002352'	056501	000116			BIS	L.DLCQ(R5),R1
   801	002356'	056501	000154			BIS	L.MSGQ(R5),R1
   802	002362'	156501	000044			BISB	L.DTXL(R5),R1		; CHECK SUSPENDED PROCESSES
   803	002366'	001002				BNE	10$			; NR.ABS (ABORT STARTED)
   804	002370'	012700	000001			MOV	#NR.NAB,R0		; NOTHING TO ABORT
   805	002374'				10$:	CALLR	Q$PURG			; CLEAR THE WORLD
   806
   807					;+
   808					; Request capabilities
   809					;-
   810	002400'	105265	000112		CTLCPB:	INCB	L.CAPP(R5)		; SET CAPABILITIES PENDING FLAG
   811	002404'					RETURN
   812
   813					;+
   814					; Dump output buffers
   815					;-
   816	002406'	105765	000111		CTLDMP:	TSTB	L.RATT(R5)		; PENDING ATTENTION?
   817	002412'	001010				BNE	10$			; YES
   818	002414'	105765	000112			TSTB	L.CAPP(R5)		; PENDING CAPABILITIES?
   819	002420'	001005				BNE	10$			; YES
   820	002422'	005765	000066			TST	L.DDMQ(R5)		; NOT TO DLC, CHECK ON PHYSICAL QUEUE
   821	002426'	001002				BNE	10$			; IT'S THERE, OKAY
   822	002430'	012700	000001			MOV	#NR.NOB,R0		; NOTHING TO DUMP
   823	002434'				10$:	RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 16
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   825					;+
   826					; Pause output
   827					;-
   828	002436'	032765	000006	000056	CTLPAU:	BIT	#LA.PAU!LA.ADN,L.ASTS(R5) ; ALREADY PAUSED/PAUSING?
   829	002444'	001017				BNE	20$			; YES
   830	002446'	005765	000116			TST	L.DLCQ(R5)		; ANYTHING QUEUED?
   831	002452'	001005				BNE	10$			; YES, OKAY TO PAUSE
   832	002454'	005765	000066			TST	L.DDMQ(R5)		; NONE IN VIRTUAL, CHECK PHYSICAL
   833	002460'	001002				BNE	10$
   834	002462'	012700	000002			MOV	#NR.NDP,R0		; NOTHING TO PAUSE
   835	002466'	004767	004230		10$:	CALL	$LESTP			; ENSURE ONLY ONE ATTENTION MESSAGE
   836	002472'	052765	000002	000056		BIS	#LA.PAU,L.ASTS(R5)	; PAUSE NO MATTER WHAT
   837	002500'					CALLR	$LEGO			; MAKE SURE IT HAPPENS
   838
   839	002504'	012700	000001		20$:	MOV	#NR.PAU,R0		; ALREADY PAUSED
   840	002510'					RETURN
   841
   842
   843					;+
   844					; RESUME OUTPUT
   845					;-
   846	002512'	032765	000006	000056	CTLRSM:	BIT	#LA.PAU!LA.ADN,L.ASTS(R5) ; CHECK PAUSEDNESS
   847	002520'	001417				BEQ	20$			; NOTHING HUNG
   848	002522'	042765	010206	000056		BIC	#LA.PAU!LA.ADN!LA.ERR!LA.PLE,L.ASTS(R5)	; No pause conditions
   849	002530'	005765	000066			TST	L.DDMQ(R5)		; CHECK FOR ANY CURRENT DATA XFER'S
   850	002534'	001403				BEQ	10$			; SOMETHING IN PRINT Q
   851	002536'	004767	004142			CALL	$LEGO			; TURN ON DEVICE AGAIN
   852	002542'	000410				BR	30$
   853	002544'	005765	000116		10$:	TST	L.DLCQ(R5)		; RESUME NON-INTERRUPT MESSAGE PROCESSING
   854	002550'	001005				BNE	30$			; SOMETHING WAITING TO PROCESSED
   855	002552'	012700	000002			MOV	#NR.NDR,R0		; NOTHING TO RESUME
   856	002556'	000402				BR	30$
   857
   858	002560'	012700	000001		20$:	MOV	#NR.NPS,R0		; NOT PAUSED
   859	002564'				30$:	RETURN
   860
   861					;+
   862					; Status request
   863					;-
   864	002566'	105765	000111		CTLSTS:	TSTB	L.RATT(R5)		; CHECK ATTENTION ALREADY PENDING
   865	002572'	001003				BNE	10$			; DON'T MUNG ORIGNAL REASON
   866	002574'	112765	000003	000111		MOVB	#N.ARQS,L.RATT(R5)	; SET ATTENTION PENDING FLAG
   867	002602'				10$:	RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 17
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   869					;+
   870					; NURD Features message handlers
   871					;
   872					; Feature message format:
   873					;   <seq no.><no. feature specs><...feature specs...>
   874					; 
   875					; Feature spec format:
   876					;   <feature id><feature flags><class><response>[<feature data>]
   877					;
   878					; Feature data format:
   879					;   <cnt><...data...>
   880					; 
   881					; NOTE: Incoming message has only one feature spec.
   882					; 
   883					; Buffer has been set up and NURD type and flags bytes
   884					; (1st & 2nd bytes) have been extracted.
   885					; 
   886					;	R4	CCB at top of L.DLCQ
   887					;	R5	Database address
   888					;	KISAR6	Mapped to data buffer
   889					;-
   890						.enabl	lsb
   891
   892	002604'	012700	000002		FTRSYN:	MOV	#NM.FTR,R0		; BEGIN A REPLY
   893	002610'	004767	001734			CALL	MS$BYT			; INSERT NURD MESSAGE TYPE
   894	002614'	005000				CLR	R0
   895	002616'	004767	001726			CALL	MS$BYT			; INSERT MESSAGE FLAGS
   896	002622'	004767	003010			CALL	RD$BYT			; GET SEQ NO.
   897	002626'	110065	000123			MOVB	R0,L.DMSQ(R5)
   898	002632'	004767	001712			CALL	MS$BYT			; SEND IT BACK
   899	002636'	004767	002774			CALL	RD$BYT			; GET NO. FEATURE SPECS
   900	002642'	005000				CLR	R0			;  BUT IGNORE IT
   901	002644'	110065	000127			MOVB	R0,L.NFSP(R5)		; SAVE IT FOR SOMTHING
   902	002650'	004767	001674			CALL	MS$BYT			; STUFF IT IN REPLY
   903	002654'	004767	002756			CALL	RD$BYT			; GET FEATURE ID
   904	002660'	010002				MOV	R0,R2
   905	002662'	004767	002750			CALL	RD$BYT			; GET FEATURE FLAGS
   906	002666'	010001				MOV	R0,R1
   907	002670'	004767	002742			CALL	RD$BYT			; GET CLASS
   908	002674'	000301				SWAB	R1
   909	002676'	050001				BIS	R0,R1			; R1/FLAGS,,CLASS
   910	002700'	004767	002732			CALL	RD$BYT			; READ THE RESPONSE FIELD AND IGNORE IT
   911
   912	002704'	105065	000126			CLRB	L.CAPN(R5)		; INIT INDEX INTO CAPABILITIES LIST
   913	002710'	122702	000377			CMPB	#FE.ALL,R2		; CHECK FOR ALLNESS
   914	002714'	001036				BNE	30$			; SINGLE FEATURE
   915	002716'	005002				CLR	R2			; INIT COMMON FID'S
   916	002720'	116565	000166	000126		MOVB	L.CFET(R5),L.CAPN(R5)	; GET COUNT OF COMMON ENTRIES
   917	002726'	032701	000400			BIT	#NF.CMD*400,R1		; ALL FEATURES - CHECK READ/SET
   918	002732'	001403				BEQ	10$			; READ - CONTINUE
   919	002734'	122701	000002			CMPB	#FC.SST,R1		; SET - CHECK SET TO STANDARD
   920	002740'	001107				BNE	FERERR			; NO - ILLEGAL COMBINATION
   921
   922	002742'	105202			10$:	INCB	R2			; ADVANCE THRU LIST
   923	002744'	100410				BMI	15$			; GRUBBLING THRU DEVICE FEATURES
   924	002746'	120265	000126			CMPB	R2,L.CAPN(R5)		; CHECK RANGE
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 17-1
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   925	002752'	101413				BLOS	20$			; OK
   926	002754'	116565	000200	000126		MOVB	L.DFET(R5),L.CAPN(R5)	; INIT FOR DEVICE SPECFIC FEATURES
   927	002762'	012702	000201			MOV	#201,R2
   928	002766'	010200			15$:	MOV	R2,R0			; DEVICE FEATURE - HACK OFF SIGN
   929	002770'	042700	177600			BIC	#^C177,R0
   930	002774'	120065	000126			CMPB	R0,L.CAPN(R5)		; CHECK RANGE
   931	003000'	101022				BHI	70$			; DONE
   932	003002'	004767	001026		20$:	CALL	FTRFND			; LOOK IT UP
   933	003006'	103004				BCC	40$			; SUPPORTED FEATURE
   934	003010'	000754				BR	10$			; TRY NEXT ONE
   935
   936	003012'	004767	001016		30$:	CALL	FTRFND			; LOOK UP FEATURE 
   937	003016'	103447				BCS	FERUSF			; UNSUPPORTED FEATURE
   938
   939					; AT THIS POINT:
   940					;	R1	Feature message-flags(hi) + class(lo)
   941					;	R2	Feature id (byte)
   942					;	R3	Points to feature status byte
   943					;	R5	Database address
   944					;	L.DMSQ	Sequence no.
   945					;	L.NFSP	Number of specs
   946
   947	003020'	132713	000040		40$:	BITB	#FB.CP,(R3)		; CHECK FOR CHANGE PENDING
   948	003024'	001060				BNE	FERCPN			; CAN'T READ OR SET IF SO
   949	003026'	032701	000400			BIT	#NF.CMD*400,R1		; FEATURE READ OR FEATURE SET?
   950	003032'	001505				BEQ	FTRSHO			; READ - GO PROCESS FEATURE READ
   951	003034'					CALLR	FTRSET			; SET - GO PROCESS IN FEATURE SET
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 18
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   953	003040'	105765	000126		FTRCON:	TSTB	L.CAPN(R5)		; CHECK FOR ALLNESS
   954	003044'	001336				BNE	10$			; YES
   955
   956	003046'	016504	000154		70$:	MOV	L.MSGQ(R5),R4		; GET BEG OF MESSAGE
   957	003052'					MAP$	C.BUF(R4)
   958	003060'	016400	000020			MOV	C.BUF+2(R4),R0		; GET THE PTR
   959	003064'	116560	000127	000003		MOVB	L.NFSP(R5),N.NSPC(R0)	; SET IN THE FINAL SPEC COUNT
   960	003072'	004767	002704			CALL	RD$DQX			; RETURN ORGINAL MESSAGE TO NRD
   961	003076'					DEQ$	L.MSGQ			; GET BUFFER OFF QUEUE
   962	003114'	166564	000164	000022		SUB	L.MSGS(R5),C.CNT(R4)	; SET MESSAGE SIZE
   963	003122'	005265	000100			INC	L.IOCN(R5)		; ONE MORE OUTSTANDING I/O
   964	003126'	005065	000164			CLR	L.MSGS(R5)		; CLEAN UP TRACKS
   965	003132'					CALLR	$SCHED			; SEND IT
   966
   967	003136'				FERUSF:	PUSH$S	#FR.USF
   968	003142'	000421				BR	100$
   969	003144'				FERBCL:	PUSH$S	#FR.BCL
   970	003150'	000416				BR	100$
   971	003152'				FERNST:	PUSH$S	#FR.NST
   972	003156'	000413				BR	100$
   973	003160'				FERERR:	PUSH$S	#FR.ERR
   974	003164'	000410				BR	100$
   975	003166'				FERCPN:	PUSH$S	#FR.CPN
   976	003172'	000405				BR	100$
   977	003174'				FERNEB:	PUSH$S	#FR.NEB
   978	003200'	000402				BR	100$
   979	003202'				FERDNP:	PUSH$S	#FR.DNP
   980	003206'	010200			100$:	MOV	R2,R0			; Insert <fid><flags><class><error>
   981	003210'	004767	001334			CALL	MS$BYT			; FID
   982	003214'	010100				MOV	R1,R0
   983	003216'	000300				SWAB	R0
   984	003220'	004767	001324			CALL	MS$BYT			; Flags
   985	003224'	010100				MOV	R1,R0
   986	003226'	004767	001316			CALL	MS$BYT			; Class
   987	003232'					POP$S	R0
   988	003234'	004767	001310			CALL	MS$BYT			; Error
   989	003240'	105265	000127			INCB	L.NFSP(R5)		; Count the spec
   990	003244'	000675				BR	FTRCON
   991
   992					.dsabl	lsb
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 19
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

   994					;+
   995					; Features Read
   996					;
   997					;	R1	Feature message-flags(hi) + class(lo)
   998					;	R2	Feature id (byte)
   999					;	R3	Points to feature status byte
  1000					;	R5	Database address
  1001					;
  1002					; Reply has been formatted thru <no. specs>
  1003					; Insert in message:
  1004					;	<fid><flgs><class><resp><data>
  1005					;-
  1006
  1007	003246'	010200			FTRSHO:	MOV	R2,R0
  1008	003250'	004767	001274			CALL	MS$BYT			; INSERT FID
  1009	003254'	010100				MOV	R1,R0			; GET READ/SET BIT
  1010	003256'	000300				SWAB	R0
  1011	003260'	042700	177776			BIC	#^C<NF.CMD>,R0		; NOW ISOLATED
  1012	003264'	132713	000020			BITB	#FB.SST,(R3)		; FEATURE SET TO STANDARD?
  1013	003270'	001402				BEQ	10$			; NO
  1014	003272'	052700	000002			BIS	#NF.STD,R0		; SET TO STANDARD
  1015	003276'	004767	001246		10$:	CALL	MS$BYT			; INSERT FLAGS
  1016
  1017	003302'	105001				CLRB	R1			; SET FEATURE CLASS IN R1(LO)
  1018	003304'	132713	000001			BITB	#FB.CL1,(R3)		; CHECK CLASS 1
  1019	003310'	001402				BEQ	15$			; CLASS 0
  1020	003312'	152701	000001			BISB	#FC.CL1,R1		; SET CLASS 1
  1021	003316'	010100			15$:	MOV	R1,R0
  1022	003320'	004767	001224			CALL	MS$BYT			; INSERT CLASS
  1023
  1024	003324'	005000				CLR	R0
  1025	003326'	004767	001216			CALL	MS$BYT			; RESP - NO ERRORS
  1026
  1027	003332'	105701				TSTB	R1			; CHECK CLASS FOR LENGTH OF DATA
  1028	003334'	001406				BEQ	20$			; 1 BIT
  1029										; FEATURE DEPENDENT
  1030	003336'	132713	000006			BITB	#FB.WRD!FB.STR,(R3)	; LOOK FOR THOSE MORE THAN 1 BYTE
  1031	003342'	001012				BNE	50$			; YES
  1032										; NOT MULTIPLE BYTE DATA, SO 1 BYTE
  1033	003344'	005200				INC	R0			; COUNT = 1
  1034	003346'	004767	001176			CALL	MS$BYT			; INSERT COUNT
  1035
  1036	003352'	116300	000001		20$:	MOVB	1(R3),R0		; COPY FEATURE TABLE DATA ENTRY
  1037	003356'	004767	001166		30$:	CALL	MS$BYT			; INSERT DATA
  1038
  1039	003362'	105265	000127		40$:	INCB	L.NFSP(R5)		; COUNT THE SPEC
  1040	003366'	000624				BR	FTRCON			; CONTINUE FEATURE HACKING
  1041
  1042	003370'	132713	000004		50$:	BITB	#FB.STR,(R3)		; WORD OR STRING ?
  1043	003374'	001015				BNE	60$			; STRING 
  1044										; WORD, F.FCV = DB OFFSET TO WORD 
  1045	003376'	012700	000002			MOV	#2,R0			; 2 BYTE VALUE
  1046	003402'	004767	001142			CALL	MS$BYT			; INSERT CNT
  1047
  1048	003406'	005000				CLR	R0
  1049	003410'	156300	000001			BISB	F.FCV(R3),R0
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 19-1
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

  1050	003414'	060500				ADD	R5,R0
  1051	003416'	011000				MOV	(R0),R0			; YES, READ SETTING FROM THE Database
  1052	003420'	004767	001124			CALL	MS$BYT			; INSERT LO BYTE
  1053
  1054	003424'	000300				SWAB	R0
  1055	003426'	000753				BR	30$			; INSERT HI BYTE
  1056
  1057					; STRING - F.FCV HAS THE LENGTH,  CURRENT VALUE BEGINS AT F.FCV+1
  1058	003430'	005203			60$:	INC	R3			; THIS DEPENDS ON F.FCV=1
  1059	003432'	112300				MOVB	(R3)+,R0		; GET THE LENGTH
  1060	003434'	004767	001110			CALL	MS$BYT			; INSERT IN MESSAGE
  1061	003440'	010004				MOV	R0,R4			; SAVE IT
  1062	003442'	112300			70$:	MOVB	(R3)+,R0		; INSERT THE STRING IN MESSAGE
  1063	003444'	004767	001100			CALL	MS$BYT
  1064	003450'	105304				DECB	R4			; COUNT THE BYTE
  1065	003452'	001373				BNE	70$
  1066	003454'	000742				BR	40$
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 20
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

  1068					;+
  1069					; Features set
  1070					;
  1071					;	R1	Feature message-flags(hi) + class(lo)
  1072					;	R2	Feature id (byte)
  1073					;	R3	Points to the feature status byte
  1074					;	R5	Database address
  1075					;
  1076					; Reply has been formatted thru <no. specs=1>
  1077					;-
  1078
  1079	003456'	122701	000002		FTRSET:	CMPB	#FC.SST,R1		; CHECK STANDARDNESS
  1080	003462'	001501				BEQ	80$			; STANDARD RESULT
  1081	003464'	132713	000100			BITB	#FB.CA,(R3)		; REAL SET - CHECK IF SETABLE
  1082	003470'	001633				BEQ	FERERR			; NO
  1083	003472'	111300				MOVB	(R3),R0			; FEATURE IS SETTABE
  1084	003474'	074100				XOR	R1,R0			; CHECK CLASS SPEC
  1085	003476'	042700	177776			BIC	#^C<FB.CL1>,R0		; R0/ <CLASS SPEC'D>.NOT.EQUIV. <FEATURE CLASS>
  1086	003502'	001220				BNE	FERBCL			; RESULT SHOULD BE 0
  1087	003504'	122701	000001			CMPB	#FC.CL1,R1		; CHECK DATA CLASS
  1088	003510'	001010				BNE	10$			; CLASS 0
  1089
  1090					; CLASS 1 - FEATURE DEPENDENT
  1091	003512'	004767	002120			CALL	RD$BYT			; FEATURE DEPENDENT DATA - GET LENGTH
  1092	003516'	132713	000006			BITB	#FB.WRD!FB.STR,(R3)	; CHECK MULTIPLE BYTE DATA
  1093	003522'	001012				BNE	30$			; GO DO IT
  1094	003524'	122700	000001			CMPB	#1,R0			; ONE BYTER ?
  1095	003530'	001213				BNE	FERERR			; NO
  1096	003532'	004767	002100		10$:	CALL	RD$BYT			; CLASS 0 OR CLASS 1(1 BYTE), GET BYTE
  1097	003536'	110063	000001			MOVB	R0,1(R3)		; SET FEATURE CURRENT VALUE
  1098	003542'	142713	000020		20$:	BICB	#FB.SST,(R3)		; NOT SET TO STANDARD
  1099	003546'	000637				BR	FTRSHO			; NOW READ THE FEATURE
  1100
  1101	003550'	132713	000004		30$:	BITB	#FB.STR,(R3)		; Word or string ?
  1102	003554'	001023				BNE	40$			; String
  1103	003556'	122700	000002			CMPB	#2,R0			; 2 BYTE LENGTH
  1104	003562'	001025				BNE	50$			; SCREWED IT UP
  1105	003564'	004767	002046			CALL	RD$BYT			; GET THE PAGE LIMIT
  1106	003570'	110065	000152			MOVB	R0,L.PBRC(R5)		; HIDE THE LO PART 
  1107	003574'	004767	002036			CALL	RD$BYT			; GET THE HI PART
  1108	003600'	000300				SWAB	R0
  1109	003602'	156500	000152			BISB	L.PBRC(R5),R0		; R0/NEW WORD VALUE
  1110	003606'	010046				MOV	R0,-(SP)
  1111	003610'	005000				CLR	R0
  1112	003612'	156300	000001			BISB	F.FCV(R3),R0
  1113	003616'	060500				ADD	R5,R0
  1114	003620'	012610				MOV	(SP)+,(R0)		; SET THE NEW VALUE IN WORD
  1115	003622'	000747				BR	20$
  1116
  1117					; STRING - F.FCV HAS THE LENGTH, CURRENT VALUE BEGINS AT F.FCV+1
  1118	003624'				40$:	PUSH$S	R3			; SAVE THE FEATURE BLOCK PTR
  1119	003626'	005203				INC	R3			; THIS DEPENDS ON F.FCV=1
  1120	003630'	120023				CMPB	R0,(R3)+		; CHECK THE LENGTH
  1121	003632'	001403				BEQ	60$			; OK
  1122	003634'					POP$S	R3			; LENGTH ERROR - TO BEGINNING OF BLOCK
  1123	003636'				50$:	CALLR	FERERR			; AND REPORT THE ERROR
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 20-1
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

  1124	003642'				60$:	PUSH$S	R1			; SAVE THE VARIABLES
  1125	003644'	010001				MOV	R0,R1			; R1/COUNT, R3/PTR TO CURRENT VALUE
  1126	003646'	004767	001764		70$:	CALL	RD$BYT			; XFER NEW TO CURRENT VALUE
  1127	003652'	110023				MOVB	R0,(R3)+		; STUFF THE BYTE
  1128	003654'	077104				SOB	R1,70$			; AND COUNT IT
  1129	003656'					POP$S	<R1,R3>
  1130	003662'					CALLR	FTRSHO			; NOW READ THE FEATURE
  1131
  1132	003666'	004767	000012		80$:	CALL	SETSTD			; SET FEATURE TO STANDARD
  1133	003672'	103002				BCC	90$
  1134	003674'					CALLR	FERNST			; NO STANDARD TO SET
  1135	003700'				90$:	CALLR	FTRCON			; DON'T READ IT
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 21
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

  1137					;+
  1138					; Set feature to its standard value
  1139					;
  1140					;	R3	Pointer to feature block in database
  1141					;	R5	Database address
  1142					;-
  1143
  1144	003704'	132713	000010		SETSTD:	BITB	#FB.STE,(R3)		; SEE IF IT HAS ONE
  1145	003710'	001002				BNE	10$			; YES
  1146	003712'	000261				SEC				; NO STANDARD TO SET
  1147	003714'					RETURN
  1148
  1149	003716'	132713	000006		10$:	BITB	#FB.WRD!FB.STR,(R3)	; CHECK MULTIPLE BYTE VALUES
  1150	003722'	001006				BNE	20$			; YES
  1151										; SINGLE BYTE VALUE
  1152	003724'	116363	000002	000001		MOVB	F.FSV(R3),F.FCV(R3)	; SET CURRENT VALUE = STANDARD VALUE
  1153	003732'	152713	000020			BISB	#FB.SST,(R3)		; MARK FEATURE AS SET TO STANDARD
  1154	003736'	000415				BR	30$
  1155
  1156					; MULTIPLE BYTE VALUE
  1157	003740'	132713	000004		20$:	BITB	#FB.STR,(R3)		; Word or string ?
  1158	003744'	001014				BNE	40$			; STRING
  1159	003746'					PUSH$S	R5			; WORD VALUE
  1160	003750'	005046				CLR	-(SP)
  1161	003752'	116316	000001			MOVB	F.FCV(R3),(SP)
  1162	003756'	062605				ADD	(SP)+,R5		; R5 /PTR TO CURRENT VALUE
  1163	003760'	116325	000002			MOVB	F.FSV(R3),(R5)+		; XFER LO BYTE
  1164	003764'	116315	000003			MOVB	F.FSV+1(R3),(R5)	; XFER HI BYTE
  1165	003770'					POP$S	R5
  1166
  1167	003772'	000241			30$:	CLC
  1168	003774'					RETURN
  1169
  1170	003776'				40$:	PUSH$S	<R0,R1,R3>		; STRING - F.FCV HAS THE LENGTH
  1171										;   CURRENT VALUE BEGINS AT F.FCV+1
  1172										; STANDARD VALUE BEGINS AT F.FCV+1+(F.FCV)
  1173	004004'	005203				INC	R3			; DEPENDS ON F.FCV=1
  1174	004006'	005000				CLR	R0
  1175	004010'	152300				BISB	(R3)+,R0		; GET THE COUNT
  1176	004012'	010001				MOV	R0,R1
  1177	004014'	060301				ADD	R3,R1			; R0/COUNT,R1/SOURCE ADDR,R3/DEST ADDR
  1178	004016'	112123			45$:	MOVB	(R1)+,(R3)+		; XFER THE STANDARD VALUE
  1179	004020'	077002				SOB	R0,45$			; COUNT IT
  1180	004022'					POP$S	<R3,R1,R0>
  1181	004030'	000241				CLC
  1182	004032'					RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 22
LE.M11    30-DEC-82 03:53		MESSAGE RECEIVED  (FC.RCP)

  1184					;+
  1185					; Feature finder
  1186					;
  1187					; FTRFND looks for a feature with FID in R2 and returns a pointer
  1188					; to the feature block in R3, if successful.  Normal carry flag
  1189					; condition for success or failure.
  1190
  1191	004034'	012703	000166		FTRFND:	MOV	#L.CFET,R3		; TRY COMMON FEATURE 1ST
  1192	004040'					PUSH$S	R2			; SAVE FID CAUSE IT WILL BE MANGLED
  1193	004042'	105702				TSTB	R2			; CHECK IF DEVICE SPECIFIC FTR
  1194	004044'	100004				BPL	10$			; COMMON, SKIP
  1195	004046'	012703	000200			MOV	#L.DFET,R3		; DEVICE SPECIFIC, GET POINTER
  1196	004052'	042702	177600			BIC	#177600,R2		; TRUNCATE TO JUST OFFSET ABOVE 128
  1197
  1198	004056'	001414			10$:	BEQ	20$			; ZERO IS AN ILLEGAL FEATURE CODE
  1199	004060'	060503				ADD	R5,R3			; R3 -> FEATURE LIST IN DATABASE
  1200	004062'	020213				CMP	R2,(R3)			; CHECK ON ID RANGE
  1201	004064'	103011				BHIS	20$			; SKIP IF OUT OF RANGE
  1202										; R3 POINTS TO BASE OF FEATURES LIST,
  1203										; WHICH HOLDS HIGHEST STORED CODE
  1204	004066'	060203				ADD	R2,R3			; ADD FID TO POINT TO ADDR OF BLOCK
  1205	004070'	111303				MOVB	(R3),R3			; ENTRY IS DB OFFSET TO FEATURE BLOCK
  1206	004072'	001406				BEQ	20$			; UNSUPPORTED FEATURE
  1207	004074'	042703	177400			BIC	#^C377,R3		; FLUSH SIGN EXTENSION
  1208	004100'	060503				ADD	R5,R3			; R3 -> FEATURE BLOCK
  1209	004102'					POP$S	R2
  1210	004104'	000241				CLC
  1211	004106'					RETURN
  1212
  1213	004110'				20$:	POP$S	R2			; UNSUPPORTED FEATURE
  1214	004112'	000261				SEC
  1215	004114'					RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 23
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1217					.sbttl	Support Routines
  1218					;+
  1219					; The following pages, up to start of interrupt handler code,
  1220					; contain the various support routines needed in LE.
  1221					;
  1222					; The routines are arranged in alphabetical order.
  1223					;-
  1224
  1225
  1226
  1227
  1228					;+
  1229					; Physical Buffer Management
  1230					;-
  1231	004116'				BF$SDB:	PUSH$S	R1			; Save R1
  1232	004120'	012701	000120			MOV	#80.,R1			; Size of buffer wanted
  1233	004124'	004767	000000G			CALL	$CBBGT			; Get a message buffer
  1234	004130'	103416				BCS	10$			; Oops
  1235	004132'	010164	000022			MOV	R1,C.CNT(R4)		; Set size
  1236	004136'	112764	000004	000025		MOVB	#S$PEOM,C.PRM1+1(R4)	; Init as a whole message
  1237	004144'	112764	000002	000012		MOVB	#FC.XME,C.FNC(R4)	; Set function code
  1238	004152'	112764	000006	000013		MOVB	#S$SND,C.MOD(R4)	; Assume normal data
  1239	004160'	116564	000001	000011		MOVB	L.NRD(R5),C.PIX(R4)	; Set PIX
  1240	004166'				10$:	POP$S	R1			; Restore R1
  1241	004170'					RETURN				;   and leave
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 24
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1243					;+
  1244					; Fortran carriage control processing
  1245					;
  1246					; Maps the first character of each "record" into one or more
  1247					; forms control  characters:
  1248					;  ** INPUT **      ** OUTPUT **
  1249					; 	Space		LF
  1250					; 	*		DC3
  1251					; 	+		CR
  1252					; 	-		DC3,DC3,LF
  1253					; 	/		DC4
  1254					; 	0		DC3,LF
  1255					; 	1		FF
  1256					; 	2		DLE
  1257					; 	3		VT
  1258					; 	Other		Space
  1259					;-
  1260	004172'	012701	004314'		FORM$F:	MOV	#FCCTBL,R1		; SCAN TABLE FOR 1 CHARACTER XLATIONS
  1261	004176'	012702	000007			MOV	#FCCTBN,R2
  1262	004202'	122100			10$:	CMPB	(R1)+,R0
  1263	004204'	001436				BEQ	100$			; FOUND IT
  1264	004206'	005201				INC	R1			; SKIP EQUIVALENT
  1265	004210'	077204				SOB	R2,10$
  1266	004212'	122700	000055			CMPB	#'-,R0			; CHECK MULTIPLE CHARACTER XLATIONS
  1267	004216'	001407				BEQ	20$
  1268	004220'	122700	000060			CMPB	#'0,R0
  1269	004224'	001414				BEQ	30$
  1270	004226'	012700	000040			MOV	#SPA,R0			; NOT AN FCC CHARACTER
  1271	004232'					CALLR	PR$CHR			; JUST PRINT A SPACE
  1272	004236'	012700	000003		20$:	MOV	#3,R0			; CHECK FOR ROOM IN CURRENT BUFFER
  1273	004242'	004767	001136			CALL	PR$SPC			; GET RID OF THIS BUFFER IF NOT ENOUGH
  1274	004246'	012700	000023		25$:	MOV	#DC3,R0			; DO DC3,DC3,LF
  1275	004252'	004767	000026			CALL	110$			; PRINT THW DC3
  1276	004256'	012700	000002		30$:	MOV	#2,R0			; CHECK FOR ROOM IN CURRENT BUFFER
  1277	004262'	004767	001116			CALL	PR$SPC			; GET RID OF THIS BUFFER IF NOT ENOUGH
  1278	004266'	012700	000023		35$:	MOV	#DC3,R0			; DO DC3,LF
  1279	004272'	004767	000006			CALL	110$			; PRINT THE DC3
  1280	004276'					CALLR	PR$LF			; DO A LINE FEED
  1281
  1282	004302'	111100			100$:	MOVB	(R1),R0			; GET SINGLE CHARACTER EQUIVALENT
  1283	004304'	116000	007720'		110$:	MOVB	LEASC(R0),R0		; Map the character to our set
  1284	004310'					CALLR	FORM$X
  1285
  1286	004314'	   040	   012		FCCTBL:	.byte	' ,LF
  1287	004316'	   052	   023			.byte	'*,DC3
  1288	004320'	   053	   015			.byte	'+,CR
  1289	004322'	   057	   024			.byte	'/,DC4
  1290	004324'	   061	   014			.byte	'1,FF
  1291	004326'	   062	   020			.byte	'2,DLE
  1292	004330'	   063	   013			.byte	'3,VT
  1293		000007			  FCCTBN=<.-FCCTBL>/2
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 25
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1295					;+
  1296					; Horizontal forms control translation
  1297					;
  1298					; R0/2*<translated character>
  1299					;-
  1300	004332'	106300			FORM$H:	ASLB	R0			; TEST FOR TAB OR CR
  1301	004334'	100006				BPL	10$			; HT
  1302	004336'	105065	000114			CLRB	L.COCT(R5)		; CLEAR COLUMN COUNT, A CARRIAGE RETURN
  1303	004342'	112700	000015			MOVB	#CR,R0			; SET CR CODE
  1304	004346'					CALLR	PR$BYT			; PUT IT DOWN
  1305
  1306	004352'	116500	000114		10$:	MOVB	L.COCT(R5),R0		; GET CURRENT COLUMN COUNT
  1307	004356'	110003				MOVB	R0,R3			; NO REAL LIST EXISTS, TAB BY 8'S
  1308	004360'	152703	000007			BISB	#7,R3			; SET COUNT TO NEXT TAB STOP
  1309	004364'	105203				INCB	R3			;    PLUS 1
  1310	004366'	120365	000221			CMPB	R3,LE.FWD+F.FCV(R5)	; STOP PAST FORM WIDTH?
  1311	004372'	101410				BLOS	30$			; NO (BYTES ARE ALL UNSIGNED NUMBERS)
  1312	004374'	105765	000223			TSTB	LE.TRN+F.FCV(R5)	; YES, LINE TRUNCATION ON?
  1313	004400'	001003				BNE	20$			; YES, TAB TO JUST EOL
  1314	004402'	004767	000656			CALL	PR$LF			; NO, WRAP TO NEXT LINE
  1315	004406'	000761				BR	10$			; NOW DO TAB
  1316
  1317	004410'	116503	000221		20$:	MOVB	LE.FWD+F.FCV(R5),R3	; SET TAB STOP JUST AT FORMS WIDTH
  1318	004414'	110302			30$:	MOVB	R3,R2			; SAVE NEW COLUMN COUNT
  1319	004416'	160002				SUB	R0,R2			; COMPUTE NUMBER OF
  1320	004420'	112700	000040			MOVB	#SPA,R0			;   SPACES TO DO
  1321	004424'	042702	177400			BIC	#177400,R2		; PREVENT SIGN PROBLEMS
  1322	004430'	001405				BEQ	60$			; NONE! (CAN HAPPEN IF TRUNC ON AT EOL)
  1323
  1324	004432'	004767	000224		40$:	CALL	PR$BYT			; Output a space
  1325	004436'	077203				SOB	R2,40$			; DO UNTIL DONE
  1326
  1327	004440'	110365	000114		50$:	MOVB	R3,L.COCT(R5)		; TAB STOP VALUE IS NEW COLUMN COUNT
  1328	004444'				60$:	RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 26
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1330					;+
  1331					; Vertical forms control translation
  1332					;
  1333					; R0/2*<translated character>
  1334					; FCXTB has translation image of all forms control characters.
  1335					;-
  1336	004446'	105065	000114		FORM$V:	CLRB	L.COCT(R5)		; CLEAR COL COUNTER ON ALL VFE'S
  1337	004452'	042700	177400			BIC	#177400,R0		; CLEAR HIGH BYTE OF R0
  1338	004456'	001002				BNE	10$			; NOT AN EXPLICIT FORM FEED
  1339	004460'					CALLR	PR$FF			; EXPLICIT FORM FEED
  1340
  1341	004464'	016000	007660'		10$:	MOV	CHMAP(R0),R0		; GET CHANNEL MAP
  1342	004470'	116501	000113			MOVB	L.LNCT(R5),R1		; GET THE LINE COUNTER
  1343	004474'	006301				ASL	R1			;   AS A WORD OFFSET
  1344	004476'	062701	007454'			ADD	#VFU66,R1		; Calculate position in VFU
  1345	004502'	005002				CLR	R2			; Clear a line spacing counter
  1346
  1347	004504'	005721			20$:	TST	(R1)+			; UP LINE POINTER, CHECK FOR END OF VFU
  1348	004506'	100002				BPL	30$			; NOT AT END OF VFU (MARKED AS MINUS)
  1349	004510'					CALLR	PR$FF			; JUST DO AN FF AND QUIT
  1350
  1351	004514'	005202			30$:	INC	R2			; UP THE LINE SPACING COUNTER
  1352	004516'	030011				BIT	R0,(R1)			; STOP MATCH AT CURRENT LINE LOCATION?
  1353	004520'	001771				BEQ	20$			; NOT YET
  1354	004522'	112700	000012			MOVB	#LF,R0			; SET LF CODE IN TO R0
  1355
  1356	004526'	004767	000130		40$:	CALL	PR$BYT			; Print a line feed
  1357	004532'	105265	000113			INCB	L.LNCT(R5)		; Count lines as we go
  1358	004536'	077205				SOB	R2,40$
  1359	004540'					RETURN
  1360
  1361
  1362					;+
  1363					; Forms control translation
  1364					;-
  1365	004542'	106300			FORM$X:	ASLB	R0			; Horizontal or vertical ?
  1366	004544'	100340				BPL	FORM$V			; Vertical
  1367	004546'	000671				BR	FORM$H			; Horizontal
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 27
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1369					;+
  1370					; NURD message builder
  1371					;
  1372					;	R0	Byte to put into buffer
  1373					;	R5	Database address
  1374					;-
  1375	004550'	005365	000164		MS$BYT:	DEC	L.MSGS(R5)		; COUNT IT
  1376	004554'	002410				BLT	20$			; BUFFER ALREADY FULL
  1377	004556'					MAP$	L.MSGA(R5)		; MAP TO BUFFER
  1378	004564'	110075	000162			MOVB	R0,@L.MSGA+2(R5)	; INSERT CHAR
  1379	004570'	005265	000162			INC	L.MSGA+2(R5)		; ADVANCE PTR
  1380	004574'					RETURN
  1381
  1382	004576'	005065	000164		20$:	CLR	L.MSGS(R5)		; RESET THE COUNT
  1383	004602'				25$:	PUSH$S	R4
  1384	004604'	004767	177306			CALL	BF$SDB			; GET A BUFFER
  1385	004610'	103420				BCS	30$			; Oops
  1386	004612'	016465	000016	000160		MOV	C.BUF(R4),L.MSGA(R5)	; MAKE IT THE CURRENT BUFFER
  1387	004620'	016465	000020	000162		MOV	C.BUF+2(R4),L.MSGA+2(R5)
  1388	004626'	016465	000022	000164		MOV	C.CNT(R4),L.MSGS(R5)
  1389	004634'					ENQ$	L.MSGQ			; ADD IT TO END OF LIST
  1390	004646'					POP$S	R4
  1391	004650'	000737				BR	MS$BYT			; NOW STUFF THE CHAR
  1392
  1393	004652'				30$:	POP$S	R4
  1394	004654'	004767	001652			CALL	ZZ$SLP			; WAIT A SEC AND TRY AGAIN
  1395	004660'	000750				BR	25$
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 28
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1397					;+
  1398					; Put a byte into the physical output buffer
  1399					;-
  1400	004662'	005365	000150		PR$BYT:	DEC	L.PLBS(R5)		; Decrement the counter
  1401	004666'	002410				BLT	10$			; Buffer, if any, is full already
  1402	004670'					MAP$	L.PLBP(R5)		; Map it
  1403	004676'	110075	000146			MOVB	R0,@L.PLBP+2(R5)	; Stash byte in physical buffer
  1404	004702'	005265	000146			INC	L.PLBP+2(R5)		; Advance the pointer
  1405	004706'					RETURN
  1406
  1407	004710'	005065	000150		10$:	CLR	L.PLBS(R5)		; CORRECT DECREMENT OVERRUN
  1408	004714'	005765	000146			TST	L.PLBP+2(R5)		; PHYSICAL BUFFER IN PROCESS?
  1409	004720'	001402				BEQ	20$			; NO, GO GET ONE
  1410	004722'	004767	000062			CALL	PR$DQX			; STUFF THE LP
  1411
  1412	004726'	004767	000406		20$:	CALL	PR$NEW			; SET UP A NEW BUFFER
  1413	004732'	000753				BR	PR$BYT			; TRY AGAIN
  1414
  1415
  1416					;+
  1417					; Put a printing character into the physical output buffer.
  1418					;-
  1419	004734'	126565	000114	000221	PR$CHR:	CMPB	L.COCT(R5),LE.FWD+F.FCV(R5) ; COL CT LE FORM WIDTH?
  1420	004742'	103405				BLO	28$			; YES, OKAY (UNSIGNED COMPARISON)
  1421	004744'	105765	000223			TSTB	LE.TRN+F.FCV(R5)	; LINE TRUNCATION ON?
  1422	004750'	001016				BNE	35$			; IF SO, EAT CHARACTERS TIL FC COMES
  1423	004752'	004767	000306			CALL	PR$LF			; FORCE WRAP TO NEXT LINE
  1424
  1425	004756'	105765	000217		28$:	TSTB	LE.LCR+F.FCV(R5)	; UPPER CASE ONLY ON?
  1426	004762'	001405				BEQ	30$			; NO
  1427	004764'	120027	000140			CMPB	R0,#140			; YES, IS CHAR LOWER CASE?
  1428	004770'	103402				BLO	30$			; NO
  1429	004772'	042700	000040			BIC	#40,R0			; YES, CLEAR UNSHIFT BIT
  1430
  1431	004776'	004767	177660		30$:	CALL	PR$BYT			; PUT CURRENT CHARACTER TO BUFFER
  1432	005002'	105265	000114			INCB	L.COCT(R5)		; COUNT THE COLUMN
  1433	005006'				35$:	RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 29
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1435					;+
  1436					; Dequeue and transmit physical buffer.
  1437					;-
  1438	005010'				PR$DQX:	DEQ$	L.PLBQ			; Dequeue the physical buffer
  1439	005026'	016764	000000G	000022		MOV	.RDBSZ,C.CNT(R4)	; Buffer is originally this big
  1440	005034'	166564	000150	000022		SUB	L.PLBS(R5),C.CNT(R4)	; Subtract unused count
  1441	005042'	005065	000146			CLR	L.PLBP+2(R5)		; Clear current buffer
  1442	005046'	005065	000150			CLR	L.PLBS(R5)		;  and size
  1443	005052'					CALLR	$LEQUE			; Send it
  1444
  1445
  1446
  1447
  1448					;+
  1449					; Print a form feed, and adjust counters
  1450					;-
  1451	005056'				PR$FF:	PUSH$S	R0
  1452	005060'	112700	000014			MOVB	#FF,R0			; SET FF CHAR
  1453	005064'	004767	177572			CALL	PR$BYT			; TRY TO PUT IT
  1454	005070'					POP$S	R0
  1455	005072'	105065	000113			CLRB	L.LNCT(R5)		; CLEAR LINE COUNT
  1456	005076'	105065	000114			CLRB	L.COCT(R5)		; CLEAR COLUMN COUNTER
  1457	005102'					RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 30
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1459					;+
  1460					; Called to return a data CCB.
  1461					;	R4	CCB
  1462					;	R5	Database address
  1463					;
  1464					; The CCB may be a physical buffer that has been printed and may
  1465					; have a source buffer pointer in C.STK (to be returned).  The
  1466					; CCB may be other than a physical buffer, being circulated through
  1467					; the driver queue to synchronize its transmission with the printed
  1468					; data.
  1469					;-
  1470	005104'	105764	000011		PR$FIN:	TSTB	C.PIX(R4)		; Physical buffer?
  1471	005110'	001046				BNE	100$			; No, a source buffer in disguise
  1472	005112'					PUSH$S	R4			; Yes, save its address
  1473	005114'	016404	000004			MOV	C.STK(R4),R4		; Get source buffer address
  1474	005120'	001402				BEQ	26$			; None here
  1475	005122'	004767	000100			CALL	100$			; Return source buf to owner
  1476
  1477	005126'				26$:	POP$S	R4			; Restore physical buffer address
  1478	005130'	005064	000004			CLR	C.STK(R4)		; Assure no pointer left here
  1479	005134'	032764	000400	000014		BIT	#LA.EOF,C.STS(R4)	; Check this buffer for eof condition
  1480	005142'	001403				BEQ	30$
  1481	005144'	052765	000040	000056		BIS	#LA.CPC,L.ASTS(R5)	; IF SO, SET FLAG TO CLEAR PAGE COUNT
  1482										;   BEFORE NEXT OUTPUT
  1483	005152'	032764	000100	000014	30$:	BIT	#LA.AKR,C.STS(R4)	; MARKED TO ACKNOWLEDGE DATA MESSAGE?
  1484	005160'	001414				BEQ	45$			; NO
  1485	005162'	105765	000111			TSTB	L.RATT(R5)		; ATTENTION PENDING?
  1486	005166'	001404				BEQ	40$			; NO, SET UP TO ACK
  1487	005170'	126527	000111	000002		CMPB	L.RATT(R5),#N.AACK	; IS CURRENT REASON MORE IMPORTANT?
  1488	005176'	101005				BHI	45$			; YES, LET THE PENDING REASON STAND
  1489	005200'	112765	000002	000111	40$:	MOVB	#N.AACK,L.RATT(R5)	; NO, USE ACKNOWLEDGE AS THE REASON
  1490	005206'	004767	000730			CALL	SN$ATT			; TRY TO SEND AN ATTENTION
  1491
  1492	005212'				45$:	ENQ$	L.PLBQ			; Queue physical buffer for future use
  1493	005224'					RETURN
  1494
  1495					; Return a source buffer to NRD
  1496	005226'	012764	000001	000014	100$:	MOV	#S.SSUC,C.STS(R4)	; ACK A NRD message
  1497	005234'	032765	000010	000056		BIT	#LA.ABO,L.ASTS(R5)	; Abort in progress ?
  1498	005242'	001403				BEQ	101$			; No, serenity
  1499	005244'	012764	177767	000014		MOV	#S.EABO,C.STS(R4)	; Indicate purge
  1500	005252'	112764	000004	000012	101$:	MOVB	#FC.RCE,C.FNC(R4)	; Return it
  1501	005260'					CALLR	$SCHED			; ...
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 31
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1503					;+
  1504					; Print a line feed
  1505					;-
  1506	005264'	005001			PR$LF:	CLR	R1
  1507	005266'	156501	000113			BISB	L.LNCT(R5),R1		; GET LINE COUNTER BYTE
  1508	005272'	006301				ASL	R1			;   AS WORD OFFSET
  1509	005274'	062701	007454'			ADD	#VFU66,R1		; POINT INTO CURRENT VFU
  1510	005300'	005721				TST	(R1)+			; UP LINE POINTER
  1511	005302'	100665				BMI	PR$FF			; SKIP IF PAST END OF TABLE
  1512	005304'	032711	000200			BIT	#VFBP8,(R1)		; ***TABLE SPECIFIC HACK
  1513	005310'	001662				BEQ	PR$FF			; APPARENTLY IN MARGIN, GO DO TOF
  1514	005312'					PUSH$S	R0
  1515	005314'	112700	000012			MOVB	#LF,R0			; SET CHAR
  1516	005320'	004767	177336			CALL	PR$BYT			; DO IT
  1517	005324'					POP$S	R0
  1518	005326'	105265	000113			INCB	L.LNCT(R5)		; UP LINE COUNTER
  1519	005332'	105065	000114			CLRB	L.COCT(R5)		; CLEAR COL CTR WHEN GOING TO NEW LINE
  1520	005336'					RETURN				; CARRY STAYS AS SET BY LAST CALL
  1521
  1522
  1523					;+
  1524					; Set up new physical output buffer
  1525					;-
  1526	005340'	016504	000140		PR$NEW:	MOV	L.PLBQ(R5),R4		; IS ONE ENQUEUED?
  1527	005344'	001414				BEQ	10$			; NO
  1528	005346'	005064	000014			CLR	C.STS(R4)		; INIT STATUS
  1529	005352'	016465	000016	000144		MOV	C.BUF(R4),L.PLBP(R5)	; SET NEW ADDRESS DOUBLEWORD
  1530	005360'	016465	000020	000146		MOV	C.BUF+2(R4),L.PLBP+2(R5) 
  1531	005366'	016765	000000G	000150		MOV	.RDBSZ,L.PLBS(R5)	; SET BUFFER MAX SIZE
  1532	005374'					RETURN
  1533
  1534	005376'	004767	001130		10$:	CALL	ZZ$SLP			; SLEEP TIL A BUFFER MEANDERS BACK
  1535	005402'	000756				BR	PR$NEW
  1536
  1537
  1538					;+
  1539					; Check for room in current buffer.  Start new buffer if needed.
  1540					;	R0	Number of bytes of space needed
  1541					;-
  1542	005404'	005765	000146		PR$SPC:	TST	L.PLBP+2(R5)		; BUFFER IN USE ?
  1543	005410'	001406				BEQ	20$			; NOPE - GO GET ONE
  1544	005412'	020065	000150			CMP	R0,L.PLBS(R5)		; ROOM ?
  1545	005416'	003001				BGT	10$
  1546	005420'					RETURN
  1547
  1548	005422'	004767	177362		10$:	CALL	PR$DQX			; NO ROOM - FLUSH CURRENT
  1549	005426'				20$:	CALLR	PR$NEW			;  AND GET NEW ONE
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 32
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1551					;+
  1552					; Purge the queues
  1553					;
  1554					; Abort all from  <DDMQ>, <DLCQ>, and <MSGQ>   (in that order).
  1555					; Assumes that printer is stopped.
  1556					;-
  1557	005432'				Q$PURG:	PUSH$S	<R0,R1,R3,R4>		; SAVE CURRENT CCB, DATABASE ADDR, ETC.
  1558
  1559	005442'				10$:	DEQ$	L.DDMQ,20$		; RETURN PHYSICAL BUFFERS TO THE PB Q
  1560	005462'	004767	177416			CALL	PR$FIN			; RETURN ANY MESSAGE BUFS
  1561	005466'	000765				BR	10$			;   AND RESTORE PHYSICAL BUFS TO LIST
  1562
  1563	005470'				20$:	DEQ$	L.DLCQ,30$		; Abort messages waiting to be done
  1564	005510'	012764	177767	000014		MOV	#S.EABO,C.STS(R4)	; ...
  1565	005516'	112764	000004	000012		MOVB	#FC.RCE,C.FNC(R4)	; ...
  1566	005524'	004767	000000G			CALL	$SCHED			; ...
  1567	005530'	000757				BR	20$			; Look on
  1568
  1569	005532'				30$:	DEQ$	L.MSGQ,40$		; FLUSH ANYTHING GOING OUT
  1570	005552'	012701	000120			MOV	#80.,R1			; SET SIZE OF BUFFER
  1571	005556'	004767	000000G			CALL	$CBBRT			; RETURN IT
  1572	005562'	000763				BR	30$
  1573
  1574	005564'	105065	000044		40$:	CLRB	L.DTXL(R5)		; FLUSH ANY SUSPENDED PROCESSING
  1575	005570'	005065	000064			CLR	L.PUBS(R5)		; NO CURRENT PRINT BUFFER
  1576	005574'	005065	000146			CLR	L.PLBP+2(R5)		; NO PHYSICAL BUFFER IN USE
  1577	005600'	005065	000150			CLR	L.PLBS(R5)
  1578	005604'	005065	000134			CLR	L.DMAD+2(R5)		; NO CURRENT SOURCE BUFFER
  1579	005610'	005065	000132			CLR	L.DMAD(R5)
  1580	005614'	005065	000136			CLR	L.DMBS(R5)		; MAY HAVE BEEN A BUFFER IN PROGRESS
  1581	005620'	005065	000164			CLR	L.MSGS(R5)		;  ...
  1582	005624'					POP$S	<R4,R3,R1,R0>
  1583	005634'					RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 33
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1585					;+
  1586					; Read a data byte.
  1587					;-
  1588	005636'	005365	000136		RD$BYT:	DEC	L.DMBS(R5)		; Decrement counter
  1589	005642'	002411				BLT	5$			; Buffer, if any, is drained
  1590	005644'					MAP$	L.DMAD(R5)		; Map it
  1591	005652'	005000				CLR	R0			; Get a byte from buffer
  1592	005654'	157500	000134			BISB	@L.DMAD+2(R5),R0	; ...
  1593	005660'	005265	000134			INC	L.DMAD+2(R5)		; Advance source pointer
  1594	005664'					RETURN				; Done
  1595
  1596	005666'	005765	000134		5$:	TST	L.DMAD+2(R5)		; IS A BUFFER IN PROCESS?
  1597	005672'	001423				BEQ	10$			; NO BUFFER IN USE
  1598	005674'	016504	000116			MOV	L.DLCQ(R5),R4		; CHECK FOR MESSAGE CONTINUITY
  1599	005700'	132764	000004	000025		BITB	#S$PEOM,C.PRM1+1(R4)
  1600	005706'	001405				BEQ	9$
  1601
  1602					; A message fragment, can't continue
  1603	005710'	004767	001006			CALL	$LESTP			; Stop printer interrupts
  1604	005714'	052765	000004	000056		BIS	#LA.ADN,L.ASTS(R5)	; ABORT LINK WHEN DDM QUEUE IS EMPTY
  1605
  1606	005722'	004767	000054		9$:	CALL	RD$DQX			; EMPTIED BUFFER ON TOP
  1607	005726'	032700	000004			BIT	#S$PEOM,R0		; CHECK IF EOM
  1608	005732'	001403				BEQ	10$			; NO
  1609	005734'	016506	000046			MOV	L.DFSP(R5),SP		; YES, RECOVER STACK POINTER
  1610	005740'					RETURN				;  SO WE CAN QUIT
  1611
  1612					; No buffer, so set one up
  1613	005742'	016504	000116		10$:	MOV	L.DLCQ(R5),R4		; IS THERE A QUEUED ENTRY?
  1614	005746'	001003				BNE	15$			; YES
  1615	005750'	004767	000556			CALL	ZZ$SLP			; WAIT TIL NEXT SEGMENT ARRIVES
  1616	005754'	000772				BR	10$
  1617
  1618	005756'	016465	000016	000132	15$:	MOV	C.BUF(R4),L.DMAD(R5)	; GET ADDRESS DOUBLEWORD AS PTR
  1619	005764'	016465	000020	000134		MOV	C.BUF+2(R4),L.DMAD+2(R5); ...
  1620	005772'	016465	000022	000136		MOV	C.CNT(R4),L.DMBS(R5)	; GET BUFFER COUNT AS SIZE COUNTER
  1621	006000'	000716				BR	RD$BYT			; TRY AGAIN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 34
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1623					;+
  1624					; Dequeue and return a source buffer to NRD
  1625					;-
  1626	006002'	005065	000134		RD$DQX:	CLR	L.DMAD+2(R5)		; Indicate "no buffer in use"
  1627	006006'	005065	000136			CLR	L.DMBS(R5)		; ...
  1628	006012'					DEQ$	L.DLCQ			; Dequeue message just don
  1629	006030'	116400	000025			MOVB	C.PRM1+1(R4),R0		; Remember EOM status
  1630	006034'	005765	000146			TST	L.PLBP+2(R5)		; Physical buffer in use ?
  1631	006040'	001407				BEQ	10$			; No, have to make do without one
  1632	006042'					PUSH$S	R4			; Yes, save the buffer address
  1633	006044'	016504	000140			MOV	L.PLBQ(R5),R4		; Get current physical buffer address
  1634	006050'	005764	000004			TST	C.STK(R4)		; Already have a stacked message?
  1635	006054'	001403				BEQ	20$			; No, so go ahead and stack on it
  1636	006056'					POP$S	R4			; Yes, so just stick it directly on que
  1637	006060'				10$:	CALLR	$LEQUE			; ...
  1638
  1639	006064'				20$:	POP$S	C.STK(R4)		; Ok, tie it to physical buffer
  1640	006070'					CALLR	PR$DQX			; Queue physical buffer to printer
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 35
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1642					;+
  1643					; Send alert message
  1644					;- 
  1645	006074'	004767	176016		SN$ALR:	CALL	BF$SDB			; Get a message buffer
  1646	006100'	103417				BCS	10$			; Oops
  1647	006102'	016401	000020			MOV	C.BUF+2(R4),R1		; Get buffer pointer
  1648	006106'	112721	000004			MOVB	#NM.ALR,(R1)+		; Complete alert message (1 word)
  1649	006112'	105021				CLRB	(R1)+			; Clear NURD message flags
  1650	006114'	012764	000002	000022		MOV	#2,C.CNT(R4)		; Set message length
  1651	006122'	112764	000014	000013		MOVB	#S$SNI,C.MOD(R4)	; Alert is an interrupt message
  1652	006130'	005265	000100			INC	L.IOCN(R5)		; Count the I/O
  1653	006134'	004767	000000G			CALL	$SCHED			;  and send it
  1654	006140'				10$:	RETURN
  1655
  1656
  1657
  1658
  1659					;+
  1660					; Send attention message
  1661					;
  1662					; Allocate an SDB and build attention message.
  1663					; Reason code is in L.RATT.
  1664					;-
  1665	006142'				SN$ATT:	PUSH$S	<R0,R1,R2,R3,R4>	; Preserve registers
  1666	006154'	116502	000111			MOVB	L.RATT(R5),R2		; GET EXCUSE CODE FOR ATTENTION MESSAGE
  1667	006160'	001501				BEQ	110$			; NO ATTENTION IS PENDING, LEAVE
  1668										; BUILD AND SEND AN ATTENTION MESSAGE
  1669	006162'	004767	175730			CALL	BF$SDB			; GET A MESSAGE BUFFER
  1670	006166'	103476				BCS	110$			; FAILED, EXIT - WE'LL BE BACK
  1671	006170'	016401	000020			MOV	C.BUF+2(R4),R1		; GET POINTER TO START OF BUFFER
  1672	006174'	112721	000001			MOVB	#NM.ATT,(R1)+		; LOAD MESSAGE TYPE TO BUFFER
  1673	006200'	105021				CLRB	(R1)+			; CLEAR NURD MESSAGE FLGS
  1674	006202'	116521	000123			MOVB	L.DMSQ(R5),(R1)+	; STORE LAST GOOD SEQUENCE NUMBER
  1675	006206'	110221				MOVB	R2,(R1)+		; LOAD ATTENTION CODE
  1676	006210'	005002				CLR	R2			; CLEAR FLAGS ACCUMULATOR
  1677	006212'	016500	000056			MOV	L.ASTS(R5),R0		; GET DEVICE STATUS
  1678	006216'	032700	000004			BIT	#LA.ADN,R0		; ABORT WHEN DONE ?
  1679	006222'	001402				BEQ	10$
  1680	006224'	052702	000001			BIS	#NA.FAT,R2		; SOME FATAL ERROR - USUALLY USER'S
  1681
  1682	006230'	032700	000200		10$:	BIT	#LA.ERR,R0		; PRINTER ERROR ON?
  1683	006234'	001402				BEQ	11$			; NO
  1684	006236'	052702	000002			BIS	#NA.OFL,R2		; YES, NOTE OFFLINE
  1685
  1686	006242'	032700	000002		11$:	BIT	#LA.PAU,R0		; PAUSED?
  1687	006246'	001402				BEQ	20$			; NO
  1688	006250'	052702	000004			BIS	#NA.PAU,R2		; YES
  1689
  1690	006254'	052702	000200		20$:	BIS	#200,R2			; TENTATIVELY SET EXTEND FLAG
  1691	006260'	110221				MOVB	R2,(R1)+		; THAT'S IT FOR BYTE 1 FLAGS
  1692	006262'	005002				CLR	R2			; CLEAR FOR BYTE 2 FLAGS
  1693	006264'	032700	004000			BIT	#LA.TMO,R0		; HUNG?
  1694	006270'	001402				BEQ	30$			; NO
  1695	006272'	052702	000004			BIS	#NA.DTO,R2		; YES
  1696
  1697	006276'	052702	000200		30$:	BIS	#200,R2			; TENTATIVELY SET EXTEND FLAG
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 35-1
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1698	006302'	110221				MOVB	R2,(R1)+		; THAT'S IT FOR BYTE 2
  1699	006304'	005002				CLR	R2			; CLEAR FOR BYTE 3 FLAGS
  1700
  1701	006306'	110211			40$:	MOVB	R2,(R1)			; THAT'S IT FOR BYTE 3 FLAGS
  1702	006310'	001005				BNE	50$			; 3 BYTE FEILD
  1703	006312'	142741	000200			BICB	#200,-(R1)		; NOT MORE THAN 2 BYTES
  1704	006316'	001002				BNE	50$			; 2 BYTER
  1705	006320'	142741	000200			BICB	#200,-(R1)		; ONLY 1 BYTE
  1706
  1707	006324'	005201			50$:	INC	R1			; ADVANCE R1 TO NEXT AVAILABLE BYTE
  1708	006326'	016503	000072			MOV	L.PGCT(R5),R3		; GET PAGE COUNT ACCUMULATOR
  1709	006332'	110321				MOVB	R3,(R1)+		; STORE LOW BYTE OF COUNT
  1710	006334'	000303				SWAB	R3			; GET HIGH BYTE
  1711	006336'	110321				MOVB	R3,(R1)+		; STORE IT TOO
  1712	006340'	166401	000020			SUB	C.BUF+2(R4),R1		; COMPUTE MESSAGE SIZE
  1713	006344'	010164	000022			MOV	R1,C.CNT(R4)		; STUFF IT INTO CCB
  1714	006350'	005265	000100			INC	L.IOCN(R5)		; Count the I/O
  1715	006354'	004767	000000G			CALL	$SCHED			;  and send it
  1716	006360'	105065	000111			CLRB	L.RATT(R5)		; CLEAR PENDING REQUEST FOR ATTENTION
  1717	006364'				110$:	POP$S	<R4,R3,R2,R1,R0>	; RESTORE REGS
  1718	006376'					RETURN				; EXIT SEND ATTENTION
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 36
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1720					;+
  1721					; Send capabilities message
  1722					;
  1723					; Message Format: <no. features><...fid's...>
  1724					;-
  1725	006400'	004767	175512		SN$CAP:	CALL	BF$SDB			; GET A MESSAGE BUFFER
  1726	006404'	103451				BCS	100$
  1727	006406'	016403	000020			MOV	C.BUF+2(R4),R3		; GET BUFFER ADDRESS
  1728										; FORMAT A NURD MESSAGE
  1729	006412'	112723	000005			MOVB	#NM.CAP,(R3)+		; NURD MESSAGE TYPE = CAPABILITIES
  1730	006416'	105023				CLRB	(R3)+			; NO FLAGS
  1731	006420'					PUSH$S	R3			; SAVE PTR TO CNT
  1732	006422'	105023				CLRB	(R3)+			; INIT CNT
  1733	006424'	012764	000003	000022		MOV	#3,C.CNT(R4)		; SET BUFFER CNT = BYTES INSERTED
  1734	006432'					PUSH$S	R5			; SAVE THE DATABASE PTR
  1735	006434'	062705	000166			ADD	#L.CFET,R5		; GET R5 -> COMMON FEATURES LIST
  1736	006440'	005001				CLR	R1			; INIT THE FID
  1737
  1738	006442'	005000			10$:	CLR	R0			; GET LENGTH OF FEATURE LIST
  1739	006444'	152500				BISB	(R5)+,R0
  1740	006446'	001407				BEQ	31$			; NO FEATURES!!
  1741
  1742	006450'	005201			20$:	INC	R1			; ADVANCE THE FID
  1743	006452'	105725				TSTB	(R5)+			; CHECK FOR SUPPORT OF IT
  1744	006454'	001403				BEQ	30$			; NOPE
  1745	006456'	110123				MOVB	R1,(R3)+		; YES - STORE FID IN MESSAGE
  1746	006460'	005264	000022			INC	C.CNT(R4)		; COUNT IT
  1747	006464'	077007			30$:	SOB	R0,20$
  1748	006466'	105701			31$:	TSTB	R1			; CHECK WHICH FEATURE LIST
  1749	006470'	100403				BMI	40$			; DEVICE SPECIFIC - DONE
  1750	006472'	012701	000200			MOV	#200,R1			; INIT FID FOR DEVICE SPECIFIC FEATURES
  1751	006476'	000761				BR	10$			; PROCESS THAT LIST
  1752
  1753	006500'				40$:	POP$S	R5			; GET THE DATABASE PTR BACK
  1754	006502'	016400	000022			MOV	C.CNT(R4),R0		; GET THE BUFFER CNT
  1755	006506'	162700	000003			SUB	#3,R0			; CALC NO. FEATURES FOUND
  1756	006512'	110036				MOVB	R0,@(SP)+		; STORE CNT IN CNT BYTE OF MESSAGE
  1757	006514'	005265	000100			INC	L.IOCN(R5)		; Count the I/O
  1758	006520'	004767	000000G			CALL	$SCHED			;  and send it
  1759	006524'	105065	000112			CLRB	L.CAPP(R5)		; FLUSH THE FLAG
  1760	006530'				100$:	RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 37
LE.M11    30-DEC-82 03:53		SUPPORT ROUTINES

  1762					;+
  1763					; Data / Features HIBER Function
  1764					;
  1765					; Called by process to wait for a clock tick.
  1766					;-
  1767	006532'	010065	000004		ZZ$SLP:	MOV	R0,L.DTXT(R5)		; STORE THE REGISTERS 1ST
  1768	006536'	012700	000006			MOV	#L.DTXT+2,R0
  1769	006542'	060500				ADD	R5,R0			; R0 -> R1 SLOT
  1770	006544'	010120				MOV	R1,(R0)+
  1771	006546'	010220				MOV	R2,(R0)+
  1772	006550'	010320				MOV	R3,(R0)+
  1773	006552'	010420				MOV	R4,(R0)+
  1774	006554'	105065	000044			CLRB	L.DTXL(R5)		; INIT THE COUNT
  1775
  1776	006560'	122765	000013	000044	10$:	CMPB	#DTXTSZ-5,L.DTXL(R5)	; CHECK INCIPIENT OVERFLOW
  1777	006566'	101001				BHI	20$
  1778	006570'	000003				BPT				; PROGRAM BUG
  1779	006572'	012620			20$:	MOV	(SP)+,(R0)+		; XFER NEXT STACK WORD
  1780	006574'	105265	000044			INCB	L.DTXL(R5)		; COUNT IT
  1781	006600'	026506	000046			CMP	L.DFSP(R5),SP		; CHECK ORIGIN
  1782	006604'	001365				BNE	10$			; MORE
  1783	006606'					RETURN
  1784
  1785
  1786					;+
  1787					; Clock has ticked.
  1788					;-
  1789	006610'	010665	000046		ZZ$WAK:	MOV	SP,L.DFSP(R5)		; SET THE NEW STACK ORIGIN
  1790	006614'	005000				CLR	R0
  1791	006616'	156500	000044			BISB	L.DTXL(R5),R0		; GET NO. OF WORDS TO RETURN TO STACK
  1792	006622'	006300				ASL	R0
  1793	006624'	062700	000016			ADD	#L.DTXT+12,R0
  1794	006630'	060500				ADD	R5,R0			; R0 -> 1ST WORD TO RETURN TO STACK
  1795
  1796	006632'	014046			10$:	MOV	-(R0),-(SP)		; XFER THE STACK CONTENTS
  1797	006634'	105365	000044			DECB	L.DTXL(R5)		; COUNT THEM
  1798	006640'	001374				BNE	10$
  1799	006642'	014004				MOV	-(R0),R4		; RESTORE THE REGISTERS
  1800	006644'	014003				MOV	-(R0),R3
  1801	006646'	014002				MOV	-(R0),R2
  1802	006650'	014001				MOV	-(R0),R1
  1803	006652'	014000				MOV	-(R0),R0
  1804	006654'					RETURN				; Return to original caller of ZZ$SLP
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 38
LE.M11    30-DEC-82 03:53		INTERRUPT SERVICE

  1806					.sbttl	Interrupt Service
  1807					;+
  1808					; Configuration stuff
  1809					;-
  1810		000006				LEPBFS	=	6		; NUMBER OF PHYSICAL BUFFERS TO HOARD
  1811		000005				LEHNG	=	5		; HUNG DEVICE TIME CONSTANT
  1812
  1813
  1814					;+
  1815					; LP11 hardware device register definitions
  1816					;-
  1817		000000				LPS	= 0			; LINE PRINTER STATUS REGISTER
  1818		100000					ERROR	= 100000	;  GENERAL (ONLY KNOWN) ERROR BIT
  1819		000200					DONE	= 200		;  CHARACTER DONE/PRINTER READY
  1820		000100					INTENB	= 100		;  INTERRUPT ENABLE
  1821		000002				LPB	= 2			; LINE PRINTER DATA BUFFER REGISTER
  1822										;   SEVEN BIT ASCII, WRITE ONLY
  1823		000004				LESZ	= 4			; SIZE OF LP11 REGISTER BLOCK IN BYTES
  1824
  1825
  1826					;+
  1827					; Queue output image buffers to be sent to LPT.
  1828					; Start interrupt processing if appropriate
  1829					;
  1830					;	R4	CCB
  1831					;	R5	Database address
  1832					;-
  1833						.enabl	LSB
  1834
  1835	006656'	004767	000040		$LEQUE:	CALL	$LESTP			; FLUSH INTERRUPTS WHILE WE DIDDLE Q'S
  1836	006662'					ENQ$	L.DDMQ			; QUEUE UP INCOMING OUTPUT BUFFER
  1837
  1838					; START THE DEVICE IF IT SHOULD BE
  1839	006674'	032765	000002	000056	$LESTR:	BIT	#LA.PAU,L.ASTS(R5)	; ARE WE PAUSED?
  1840	006702'	001006				BNE	10$			; EVERYTHING IS QUIESENT
  1841
  1842
  1843	006704'	112765	000005	000077	$LEGO:	MOVB	#LEHNG,L.HUNG(R5)	; SET THE HUNG TIMER
  1844	006712'	012775	000100	000002		MOV	#INTENB,@L.CSR(R5)	; GOOSE IT
  1845	006720'				10$:	RETURN
  1846						.DSABL	LSB
  1847
  1848
  1849	006722'	005075	000002		$LESTP:	CLR	@L.CSR(R5)		; STOP THE INTERRUPTS
  1850	006726'	105065	000077			CLRB	L.HUNG(R5)		; AND FLUSH THE HUNG TIMER
  1851	006732'					RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 39
LE.M11    30-DEC-82 03:53		INTERRUPT SERVICE

  1853					;+
  1854					; Field interrupts:
  1855					;	Dispatch to error if error set,
  1856					;	  alternate error if pause set,
  1857					;	  else output next character.
  1858					;	If last character of buffer sent, go to interrupt on done
  1859					;	to return used buffer and start next one.
  1860					;
  1861					;	R5	Database address
  1862					;-
  1863
  1864	006734'	032765	020000	000056	$LEINT::BIT	#LA.INT,L.ASTS(R5)	; Already handling interrupt ?
  1865	006742'	001401				BEQ	1$			; No, so go to it
  1866	006744'					RETURN				; Yes, so dismiss this one
  1867	006746'	052765	020000	000056	1$:	BIS	#LA.INT,L.ASTS(R5)	; Say we are processing an interrupt
  1868	006754'	105065	000077			CLRB	L.HUNG(R5)		; Reset the hung timer
  1869	006760'	010504				MOV	R5,R4			; Build pointer to SYNCH block
  1870	006762'	062704	000050			ADD	#L.SYN,R4		;  ...
  1871	006766'	012764	007000'	000004		MOV	#5$,S.DSP(R4)		; Set return address
  1872	006774'					CALLR	$SYNCH			; Go
  1873
  1874					; Here at synch level
  1875	007000'	042765	020000	000056	5$:	BIC	#LA.INT,L.ASTS(R5)	; Clear interrupt level stuff
  1876	007006'	016503	000002			MOV	L.CSR(R5),R3		; Get CSR address
  1877	007012'	005013				CLR	(R3)			; Turn off printer
  1878	007014'	032765	000002	000056		BIT	#LA.PAU,L.ASTS(R5)	; Ought we pause?
  1879	007022'	001131				BNE	INXPAU			; Yes
  1880	007024'					MAP$	L.PUBP(R5)		; Set mapping for present output
  1881	007032'	016502	000062			MOV	L.PUBP+2(R5),R2		; R2 / Buffer pointer
  1882	007036'	016501	000064			MOV	L.PUBS(R5),R1		; R1 / Buffer count
  1883	007042'	001451				BEQ	40$			; An empty one !
  1884
  1885	007044'	005713			10$:	TST	(R3)			; Check the printer status
  1886	007046'	003016				BGT	15$			; All is ok
  1887	007050'	010165	000064			MOV	R1,L.PUBS(R5)		; Some problem, we will wait a bit
  1888	007054'	010265	000062			MOV	R2,L.PUBP+2(R5)		; Save the state
  1889	007060'	012700	000200			MOV	#LA.ERR,R0		; Assume an error
  1890	007064'	005713				TST	(R3)			; Ehh ?
  1891	007066'	100503				BMI	INTPAU			; An error
  1892	007070'	112765	000005	000077		MOVB	#LEHNG,L.HUNG(R5)	; Full up, so reset the hung timer
  1893	007076'	012713	000100			MOV	#INTENB,(R3)		; Restart the device
  1894	007102'	000511				BR	LEXIT			; Wait till later
  1895
  1896	007104'	112200			15$:	MOVB	(R2)+,R0		; Printer is ready, get next character
  1897	007106'	004767	000216			CALL	LEPRT			;   and print it
  1898	007112'	103013				BCC	20$			; Jump ahead if it went ok
  1899	007114'	005301				DEC	R1			; Page-limit exceeded. FF went out
  1900	007116'	010165	000064			MOV	R1,L.PUBS(R5)		; Save state information
  1901	007122'	010265	000062			MOV	R2,L.PUBP+2(R5)		; ...
  1902	007126'	112765	000005	000111		MOVB	#N.APLE,L.RATT(R5)	; Request attention message
  1903	007134'	012700	010000			MOV	#LA.PLE,R0		; Set status correctly
  1904	007140'	000456				BR	INTPAU			; Get on out
  1905
  1906	007142'	077140			20$:	SOB	R1,10$			; Keep going while printer is hungry
  1907
  1908	007144'				30$:	DEQ$	L.DDMQ			; Take just-finished buffer off queue
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 39-1
LE.M11    30-DEC-82 03:53		INTERRUPT SERVICE

  1909	007162'	004767	175716			CALL	PR$FIN			; Return buffer
  1910	007166'	016504	000066		40$:	MOV	L.DDMQ(R5),R4		; Get address of top element of queue
  1911	007172'	001432				BEQ	60$			; None there, exit
  1912	007174'	105764	000011			TSTB	C.PIX(R4)		; Check for circulating source buffer
  1913	007200'	001361				BNE	30$			; If so, just return it
  1914	007202'	032765	000040	000056		BIT	#LA.CPC,L.ASTS(R5)	; Check if last buffer had EOF
  1915	007210'	001405				BEQ	50$			; No
  1916	007212'	005065	000072			CLR	L.PGCT(R5)		; Yes - clear page counter
  1917	007216'	042765	000040	000056		BIC	#LA.CPC,L.ASTS(R5)	; Reset the flag
  1918
  1919	007224'				50$:	MAP$	C.BUF(R4)		; Set mapping
  1920	007232'	016465	000016	000060		MOV	C.BUF(R4),L.PUBP(R5)	;   and save it too
  1921	007240'	016402	000020			MOV	C.BUF+2(R4),R2		; Buffer pointer
  1922	007244'	016401	000022			MOV	C.CNT(R4),R1		; Buffer length
  1923	007250'	001735				BEQ	30$			; Empty buffers are empty
  1924	007252'	016503	000002			MOV	L.CSR(R5),R3		; Get CSR address again
  1925	007256'	000672				BR	10$			; Continue where we left off
  1926
  1927	007260'	005065	000064		60$:	CLR	L.PUBS(R5)		; Clear L.PUBS for next startup
  1928	007264'	032765	000004	000056		BIT	#LA.ADN,L.ASTS(R5)	; Check for auto death
  1929	007272'	001415				BEQ	LEXIT			; Nope
  1930	007274'	005000				CLR	R0			; Yes - pause now
  1931					;	BR	INTPAU			; ...
  1932
  1933
  1934	007276'	052700	000002		INTPAU:	BIS	#LA.PAU,R0		; Always have this bit lit
  1935	007302'	050065	000056			BIS	R0,L.ASTS(R5)		; Put whole thing into database
  1936	007306'	105765	000111		INXPAU:	TSTB	L.RATT(R5)		; Attention already pending?
  1937	007312'	001005				BNE	LEXIT			; Yes, don't overwrite reason code
  1938	007314'	112765	000001	000111		MOVB	#N.ASTC,L.RATT(R5) 	; No, note status change
  1939	007322'	004767	176614			CALL	SN$ATT			; Build and send attention message
  1940
  1941	007326'				LEXIT:	RETURN				; Leave
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 40
LE.M11    30-DEC-82 03:53		INTERRUPT SERVICE

  1943					; Printer output routine
  1944	007330'	122700	000012		LEPRT:	CMPB	#LF,R0			; CHECK FOR LF'S AND FF'S
  1945	007334'	001025				BNE	30$
  1946	007336'	110063	000002			MOVB	R0,2(R3)		; LF - PRINT IT
  1947	007342'	105265	000076			INCB	L.PLNC(R5)		; COUNT IT
  1948	007346'	122765	000102	000076		CMPB	#PGLEN,L.PLNC(R5)	; CHECK FOR PAGE BOUNDARY
  1949	007354'	003035				BGT	50$			; OK
  1950
  1951	007356'	105065	000076		20$:	CLRB	L.PLNC(R5)		; PAGE - CLEAR LINE COUNT
  1952	007362'	005265	000072			INC	L.PGCT(R5)		; COUNT THE PAGE
  1953	007366'	005765	000074			TST	L.PGLM(R5)		; CHECK PAGE LIMIT
  1954	007372'	001426				BEQ	50$			; NOT SET
  1955	007374'	026565	000072	000074		CMP	L.PGCT(R5),L.PGLM(R5)	; COMPARE COUNT TO LIM
  1956	007402'	003422				BLE	50$			; STILL OK
  1957	007404'	000261				SEC				; TOO BAD
  1958	007406'					RETURN
  1959
  1960	007410'	122700	000014		30$:	CMPB	#FF,R0			; CHECK FF
  1961	007414'	001013				BNE	40$			; NOT A CRITICAL CHARACTER
  1962	007416'	122765	000101	000076		CMPB	#PGLEN-1,L.PLNC(R5)	; CHECK FOR LAST LINE
  1963	007424'	003403				BLE	35$			; BOF - FF IS SPECIAL CASE
  1964	007426'	110063	000002			MOVB	R0,2(R3)		; Not BOF - Print FF and count page
  1965	007432'	000751				BR	20$
  1966
  1967	007434'	112763	000012	000002	35$:	MOVB	#LF,2(R3)		; LINE FEED AT BOF TO AVOID BLANK PAGE
  1968	007442'	000745				BR	20$			; COUNT THE PAGE
  1969
  1970	007444'	110063	000002		40$:	MOVB	R0,2(R3)		; JUST PRINT THE CHARACTER
  1971	007450'	000241			50$:	CLC
  1972	007452'					RETURN
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 41
LE.M11    30-DEC-82 03:53		MISCELLANEOUS TABLES

  1974					.sbttl	Miscellaneous Tables
  1975					;+
  1976					; The following table defines the default contents for the LP11
  1977					; vertical format unit (VFU) for a 66 line page.
  1978					; NOTE: All VFU actions also perform carriage return action.
  1979					;
  1980					; Channel  1 - (top of form) line 1 only
  1981					; Channel  2 - half of form stop
  1982					; Channel  3 - every other line from line 1 up to and including line 59
  1983					; Channel  4 - every third line from line 1 up to and including line 58
  1984					; Channel  5 - every line
  1985					; Channel  6 - every tenth line from line 1 up to and including line 51
  1986					; Channel  7 - every 20th  line from line 1 up to and including line 41
  1987					; Channel  8 - next line in form
  1988					;
  1989					; Standard extension to standard vertical format unit
  1990					; Channel  9 - every fifth line from line 1 up to and including line 56
  1991					; Channel 10 - quarter of form stops
  1992					; Channel 11 - alternate top of form
  1993					; Channel 12 - (bottom of form) line 60 at 6 lpi
  1994					;-
  1995
  1996					; Set forms info
  1997		000102				PGLEN = 66.		; 66 lines per page
  1998		000074				FRMLEN = 60.		; 60 lines of form
  1999
  2000					; Name the FCXTB flags
  2001		000200			FCCHR	=	200		; CHARACTER IS A FORMS CONTROL CHARACTER
  2002		000100			HFCHR	=	100		; CHARACTER IS A HORIZONTAL CONTROL CHARACTER
  2003		000040			HFCCR	=	 40		; CHARACTER IS A CARRIAGE RETURN CHARACTER
  2004
  2005
  2006					; Support Macros
  2007					.macro 	.ZER $$
  2008						.P'$$=0
  2009					.endm	.ZER
  2010
  2011					.macro	SETCHN	A,B		; 'OR' new channel setting into map word
  2012						.P'B = .P'B ! A
  2013					.endm	SETCHN
  2014
  2015					.macro	WRDVFU	X
  2016						.word	.P'X
  2017					.endm	WRDVFU
  2018
  2019					.macro	DEFPAR	CHN,LINC,LAST
  2020						$$ = 1
  2021					.rept	LAST/LINC		; Number of stops in channel
  2022						SETCHN	CHN,\$$		; 'OR' in next stop
  2023						$$ = $$ + LINC
  2024					.endr
  2025					.endm	DEFPAR
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 42
LE.M11    30-DEC-82 03:53		MISCELLANEOUS TABLES

  2027		   001			.if ndf VCH1			; DEFINE VFU CHANNEL TAGS
  2028						$$ = 1
  2029					.irp	X,<1,2,3,4,5,6,7,8,9,10,11,12>
  2030						VCH'X = X'. - 1		; NUMERIC CHANNEL TAGS
  2031						VFBP'X = $$		; POSITIONAL CHANNEL TAGS
  2032						$$ = $$*2
  2033					.endr
  2034		   000			.endc
  2035
  2036
  2037		   001			.if ndf .P1
  2038						$$=0			; INIT THE LINE SYMBOLS .P<NN>
  2039					.rept PGLEN
  2040						$$=$$+1
  2041						.ZER \$$
  2042					.endr
  2043
  2044						; SET THE MASK BITS IN THE PARTITION WORDS ACCORDING TO
  2045						; THE FORMULA DEFINED IN THE ARGUMENTS TO DEFPAR
  2046						DEFPAR	VFBP1,1,1		; TOP OF FORM
  2047						DEFPAR	VFBP2,<<FRMLEN/2>>,FRMLEN ; HALF OF FORM STOPS
  2048						DEFPAR	VFBP3,2.,FRMLEN		; EVERY OTHER LINE
  2049						DEFPAR	VFBP4,3.,FRMLEN		; EVERY THIRD LINE
  2050						DEFPAR	VFBP5,1.,PGLEN		; EVERY LINE TO END
  2051						DEFPAR	VFBP6,10.,FRMLEN	; EVERY TENTH LINE
  2052						DEFPAR	VFBP7,20.,FRMLEN	; EVERY TWENTIETH LINE
  2053						DEFPAR	VFBP8,1.,FRMLEN		; SINGLE SPACE IN FORM
  2054						DEFPAR	VFBP9,5.,FRMLEN		; EVERY FIFTH LINE
  2055						DEFPAR	VFBP10,<<FRMLEN/4>>,FRMLEN  ; QUARTER OF FORM STOPS
  2056						DEFPAR	VFBP11,1,1		; ALTERNATE TOP OF FORM
  2057						.P75 = .P75 ! VFBP12		; SPECIAL CASE FOR BOF
  2058						.P102 = .P102 ! 100000		; FLAG LAST WORD OF VFU IMAGE TABLE
  2059		   000			.endc
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 43
LE.M11    30-DEC-82 03:53		TABLES

  2061					.sbttl	Tables
  2062					;*******
  2063					; USE THE DEFINED PARTITION WORDS TO BUILD A COMPLETE VFU IMAGE, AND
  2064					; ASSIGN PARTITIONS FOR THE WHOLD PAGE.
  2065	007454'	000000			VFU66:	$$ = 0
  2066		000102				.rept	PGLEN
  2067						$$=$$+1
  2068						WRDVFU	\$$
  2069						.endr	; R PGLEN
  2070		000204				  VFU66S = .-VFU66		; SIZE OF VFU IMAGE
  2071
  2072					; $LERAM FCT INDEX TO CHANNEL MAP
  2073	007660'	000001			CHMAP:	.word	VFBP1		;  0
  2074	007662'	000002				.word	VFBP2		;  1
  2075	007664'	000004				.word	VFBP3		;  2
  2076	007666'	000010				.word	VFBP4		;  3
  2077	007670'	000020				.word	VFBP5		;  4
  2078	007672'	000040				.word	VFBP6		;  5
  2079	007674'	000100				.word	VFBP7		;  6
  2080	007676'	000200				.word	VFBP8		;  7
  2081	007700'	000400				.word	VFBP9		;  8
  2082	007702'	001000				.word	VFBP10		;  9
  2083	007704'	002000				.word	VFBP11		;  10
  2084	007706'	004000				.word	VFBP12		;  11
  2085	007710'	000000				.word	0		;  12 UNUSED ENTRY (NO STOPS SET)
  2086	007712'	000000				.word	0		;  13 UNUSED ENTRY (NO STOPS SET)
  2087	007714'	000000				.word	0		;  14 UNUSED ENTRY (NO STOPS SET)
  2088	007716'	000000				.word	0		;  15 UNUSED ENTRY (NO STOPS SET)
  2089
  2090
  2091					; LP11 CHARACTER TRANSLATION MAP, INITIALIZED TO NURD ASCII BY OPEN.
  2092					; POTENTIALLY CHANGED BY FEATURES SETS. ROOM FOR A FULL SEVEN-BIT CODE.
  2093	007720'	000200			LEASC:	.blkb	128.
  2094						.even
  2095
  2096
  2097					; FORMS CONTROL EXCEPTION TABLE
  2098					;	 FORMAT: .byte <LEASC OFFSET>,<TRANS CONTENTS>
  2099	010120'	   011	   300		FCXTB:	.byte	HT,FCCHR!HFCHR
  2100	010122'	   012	   207			.byte	LF,FCCHR!VCH8
  2101	010124'	   013	   206			.byte	VT,FCCHR!VCH7
  2102	010126'	   014	   200			.byte	FF,FCCHR!0
  2103	010130'	   015	   340			.byte	CR,FCCHR!HFCHR!HFCCR
  2104	010132'	   020	   201			.byte	DLE,FCCHR!VCH2
  2105	010134'	   021	   202			.byte	DC1,FCCHR!VCH3
  2106	010136'	   022	   203			.byte	DC2,FCCHR!VCH4
  2107	010140'	   023	   204			.byte	DC3,FCCHR!VCH5
  2108	010142'	   024	   205			.byte	DC4,FCCHR!VCH6
  2109					; 	.byte	FS,FCCHR!VCH9		; Channels 9-12 not supported
  2110					; 	.byte	GS,FCCHR!VCH10
  2111					; 	.byte	RS,FCCHR!VCH11
  2112					; 	.byte	US,FCCHR!VCH12
  2113	010144'	177777				.word	-1			; Table ends on negative offset byte
  2114
  2115		000001			.end
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

BF$SDB  004116R    003	  679*	 1231#	 1384*	 1645*	 1669*	 1725*
CD.CWD= 000202        	   75#
CE.ABO= 177770        	   76#
CE.BUF= 177600        	   76#
CE.DCR= 177570        	   76#
CE.DEV= 177532        	   76#
CE.DIS= 177520        	   76#
CE.ERR= 177760        	   76#
CE.HFE= 177560        	   76#
CE.MOP= 177750        	   76#
CE.MTL= 177550        	   76#
CE.NTE= 177720        	   76#
CE.ROV= 177540        	   76#
CE.RTE= 177730        	   76#
CE.SRC= 177740        	   76#
CE.TMO= 177710        	   76#
CE.UDR= 177510        	   76#
CHMAP   007660R    003	 1341	 2073#
CH.64 = 000001        	   75#
CH.96 = 000002        	   75#
CLOCK   000550R    003	  121	  413#
CR    = 000015        	 1288	 1303	 2103
CS.SUC= 000001        	   76#
CTLABC  002274R    003	  719	  779#
CTLABE  002322R    003	  717	  790#
CTLABT  002330R    003	  718	  796#
CTLCPB  002400R    003	  725	  810#
CTLDMP  002406R    003	  721	  816#
CTLDSP  002024R    003	  672*	  716#	  726	  741*
CTLLEN= 000012        	  668	  726#	  736
CTLPAU  002436R    003	  722	  828#
CTLRSM  002512R    003	  723	  846#
CTLSTS  002566R    003	  720	  864#
CTLSYN  002050R    003	  541	  732#
CTLXIT  000532R    003	  353	  404#
C.BUF   000016        	   76#	  480	  481	  685	  686	  692	  693	  957	  958	 1386	 1387	 1529	 1530
			 1618	 1619	 1647	 1671	 1712	 1727	 1919	 1920	 1921
C.CHN   000002        	   76#
C.CNT   000022        	   76#	  664	  699*	  758*	  962*	 1235*	 1388	 1439*	 1440*	 1620	 1650*	 1713*	 1733*
			 1746*	 1754	 1922
C.FNC   000012        	   76#	  386*	  405*	  504*	  517*	  689*	  706*	 1237*	 1500*	 1565*
C.LIN   000010        	   76#
C.LIX   000010        	   76#
C.LNK   000000        	   76#
C.MOD   000013        	   76#	  659	 1238*	 1651*
C.OWN   000006        	   76#
C.PIX   000011        	   76#	  287	  335*	 1239*	 1470	 1912
C.PRM   000024        	   76#
C.PRM1  000024        	   76#	 1236*	 1599	 1629
C.PRM2  000026        	   76#
C.PRM3  000030        	   76#
C.PRM4  000032        	   76#
C.PRM5  000034        	   76#
C.STK   000004        	   76#	  334*	 1473	 1478*	 1634	 1639*
C.STS   000014        	   76#	  333*	  404*	  501*	  503*	  516*	  639*	  705*	 1479	 1483	 1496*	 1499*	 1528*
			 1564*
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-1
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

DATSYN  001210R    003	  538	  567#
DC1   = 000021        	 2105
DC2   = 000022        	 2106
DC3   = 000023        	 1274	 1278	 1287	 2107
DC4   = 000024        	 1289	 2108
DEL   = 000177        	  306
DLE   = 000020        	 1291	 2104
DM.ASC= 000001        	   75#
DM.AS8= 000005        	   75#
DM.AUG= 000004        	   75#
DM.CLI= 000002        	   75#
DM.EBC= 000003        	   75#
DONE  = 000200        	 1819#
DTXTSZ= 000020        	  134#	  135	 1776
DVCLOS  000370R    003	  112	  375#
DVOPEN  000000R    003	  111	  284#
EOFASC= 007417        	   75#
EO.ASC= 000001        	   75#
EO.IMG= 000002        	   75#
ERROR = 100000        	 1818#
FB.CA = 000100        	  234#	  239	  243	  248	  264	  270	 1081
FB.CL0= 000000        	  225#	  243	  248	  260	  264
FB.CL1= 000001 G      	  226#	  239	  256	  270	 1018	 1085
FB.CP = 000040        	  233#	  947
FB.SST= 000020        	  232#	  239	  248	  256	  260	  264	  270	 1012	 1098	 1153
FB.STE= 000010        	  231#	  239	  248	  256	  260	  264	  270	 1144
FB.STR= 000004        	  228#	 1030	 1042	 1092	 1101	 1149	 1157
FB.WRD= 000002        	  227#	  270	 1030	 1092	 1149
FCCHR = 000200        	 2001#	 2099	 2100	 2101	 2102	 2103	 2104	 2105	 2106	 2107	 2108
FCCTBL  004314R    003	 1260	 1286#	 1293
FCCTBN= 000007        	 1261	 1293#
FCXTB   010120R    003	  317	 2099#
FC.AST= 000000        	   76#
FC.CCP= 000022        	   76#	  102	  405
FC.CLM= 000003        	   75#
FC.CL0= 000000        	   75#
FC.CL1= 000001        	   75#	 1020	 1087
FC.CTL= 000010        	   76#	   97
FC.KCP= 000020        	   76#	  101
FC.KIL= 000006        	   76#	   96
FC.RCE= 000004        	   76#	   95	  386	  504	  517	  689	  706	 1500	 1565
FC.RCP= 000016        	   76#	  100
FC.SST= 000002        	   75#	  919	 1079
FC.SYS= 000012        	   76#
FC.TIM= 000012        	   76#	   98
FC.XCP= 000014        	   76#	   99
FC.XME= 000002        	   76#	   94	 1237
FD.AST= 000000        	   76#
FD.CCP= 000014        	   76#
FD.CTL= 000014        	   76#
FD.KCP= 000004        	   76#
FD.KIL= 000004        	   76#
FD.RCE= 000004        	   76#
FD.RCP= 000004        	   76#
FD.SYS= 000012        	   76#
FD.TIM= 000012        	   76#
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-2
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

FD.XCP= 000000        	   76#
FD.XME= 000000        	   76#
FERBCL  003144R    003	  969#	 1086
FERCPN  003166R    003	  948	  975#
FERDNP  003202R    003	  979#
FERERR  003160R    003	  920	  973#	 1082	 1095	 1123
FERNEB  003174R    003	  977#
FERNST  003152R    003	  971#	 1134
FERUSF  003136R    003	  937	  967#
FE.ALL= 000377        	   75#	  913
FE.DAT= 000001        	   75#
FE.DVT= 000006        	   75#
FE.DWD= 000011        	   75#
FE.EOF= 000005        	   75#
FE.ESC= 000000        	   75#
FE.FNM= 000010        	   75#
FE.FWD= 000004        	   75#
FE.LCR= 000003        	   75#
FE.SER= 000002        	   75#
FE.TRN= 000007        	   75#
FF    = 000014        	 1290	 1452	 1960	 2102
FM.CCB= 000010        	   76#
FM.CRA= 000002        	   76#
FM.DAT= 000000        	   76#
FM.GET= 000014        	   76#
FM.KIL= 000000        	   76#
FM.LTM= 000002        	   76#	  121
FM.NM = 000006        	   76#
FM.PIN= 000006        	   76#	  123
FM.PWF= 000004        	   76#	  122
FM.RDB= 000012        	   76#
FM.RTN= 000002        	   76#
FM.SET= 000012        	   76#
FM.STM= 000000        	   76#	  120
FM.STP= 000004        	   76#	  112
FM.STR= 000002        	   76#	  111
FM.SYN= 000004        	   76#
FM.XKL= 000004        	   76#
FORM$F  004172R    003	  612*	 1260#
FORM$H  004332R    003	 1300#	 1367
FORM$V  004446R    003	 1336#	 1366
FORM$X  004542R    003	  621*	 1284	 1365#
FRMLEN= 000074        	 1998#
FR.BCL= 000002        	   75#	  969
FR.CPN= 000005        	   75#	  975
FR.DNP= 000007        	   75#	  979
FR.ERR= 000004        	   75#	  973
FR.NEB= 000006        	   75#	  977
FR.NST= 000003        	   75#	  971
FR.USF= 000001        	   75#	  967
FTRCON  003040R    003	  953#	  990	 1040	 1135
FTRFND  004034R    003	  932*	  936*	 1191#
FTRSET  003456R    003	  951	 1079#
FTRSHO  003246R    003	  950	 1007#	 1099	 1130
FTRSYN  002604R    003	  540	  892#
F.FCV = 000001        	  235#	  586	 1049	 1112	 1152*	 1161	 1310	 1312	 1317	 1419	 1421	 1425
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-3
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

F.FSB = 000000        	  224#
F.FSV = 000002        	  236#	 1152	 1163	 1164
HFCCR = 000040        	 2003#	 2103
HFCHR = 000100        	 2002#	 2099	 2103
HT    = 000011        	 2099
INTENB= 000100        	 1820#	 1844	 1893
INTPAU  007276R    003	 1891	 1904	 1934#
INXPAU  007306R    003	 1879	 1936#
KISAR6= ****** G      	  480#*	  685#*	  692#*	  957#*	 1377#*	 1402#*	 1590#*	 1880#*	 1919#*
K.ACNT  000114        	   78#
K.ACTL  000112        	   78#
K.DES   000002        	   78#
K.DFMT  000006        	   78#
K.DGRP  000010        	   78#
K.DOBJ  000007        	   78#
K.DPL1  000010        	   78#
K.DPL2  000014        	   78#
K.DPR1  000012        	   78#
K.DPR2  000016        	   78#
K.DST   000010        	   78#
K.DUSR  000012        	   78#
K.ENDD  000156        	   78#
K.FMT   000000        	   78#
K.GRP   000002        	   78#
K.LEN   000002        	   78#
K.LN2   000006        	   78#
K.NAM   000004        	   78#
K.NM2   000010        	   78#
K.NODE  000000        	   78#
K.OBJ   000001        	   78#
K.OPDL  000134        	   78#
K.OPTD  000136        	   78#
K.PASL  000100        	   78#
K.PASW  000102        	   78#
K.RQDL  000056        	   78#
K.RQID  000060        	   78#
K.SFMT  000032        	   78#
K.SGRP  000034        	   78#
K.SIZE  000156        	   78#
K.SOBJ  000033        	   78#
K.SPL1  000034        	   78#
K.SPL2  000040        	   78#
K.SPR1  000036        	   78#
K.SPR2  000042        	   78#
K.SRC   000034        	   78#
K.SUSR  000036        	   78#
K.USR   000004        	   78#
LA.ABE= 000020        	  145#	  779	  781
LA.ABO= 000010        	  144#	  514	  779	  781	  797	 1497
LA.ADN= 000004        	  143#	  709	  772	  828	  846	  848	 1604	 1678	 1928
LA.AKR= 000100        	  147#	  572	  641	 1483
LA.CLO= 000001 G      	  141#	  285	  349	  378	  478
LA.CPC= 000040        	  146#	 1481	 1914	 1917
LA.CTL= 002000        	  151#
LA.EOF= 000400        	  149#	  575	  641	 1479
LA.EOR= 001000        	  150#	  588	  609	  613
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-4
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

LA.ERR= 000200        	  148#	  424	  430	  848	 1682	 1889
LA.INT= 020000        	  154#	 1864	 1867	 1875
LA.PAU= 000002        	  142#	  828	  836	  846	  848	 1686	 1839	 1878	 1934
LA.PLE= 010000        	  153#	  848	 1903
LA.TMO= 004000        	  152#	  437	 1693
LCFETL= 000011 G      	  208#
LDFETL= 000012 G      	  221#
LEASC   007720R    003	  307*	  310*	  314*	  316*	  320*	  604	 1283	 2093#
LECTL   000024R    002	   97	  108#
LEDATS= 000131 G      	  239#
LEDONE  000726R    003	   99	  456#
LEDSP   000750R    003	  100	  478#
LEFCCS= 000130 G      	  264#
LEHNG = 000005        	 1811#	 1843	 1892
LEHTS = 000031 G      	  256#
LELCRS= 000100 G      	  243#
LEMCB   000000R    002	   84	   92#
LEPBFS= 000006        	  330	 1810#
LEPLES= 000133 G      	  270#
LEPRT   007330R    003	 1897*	 1944#
LESFCS= 000030 G      	  260#
LESZ  = 000004        	 1823#
LETIM   000036R    002	   98	  118#
LETRNS= 000130 G      	  248#
LEXIT   007326R    003	 1894	 1929	 1937	 1941#
LE.CHS  000240 G      	  267#
LE.DAT  000213 G      	  238#
LE.DWD  000225 G      	  251#
LE.FCC  000235 G      	  263#	  586
LE.FWD  000220 G      	  245#	 1310	 1317	 1419
LE.HT   000227 G      	  255#
LE.LCR  000216 G      	  242#	 1425
LE.PLE  000242 G      	  269#
LE.SFC  000232 G      	  259#
LE.TRN  000222 G      	  247#	 1312	 1421
LF    = 000012        	 1286	 1354	 1515	 1944	 1967	 2100
LPB   = 000002        	 1821#
LPS   = 000000        	 1817#
LP.CHS= 000210        	   75#
LP.CVF= 000205        	   75#
LP.FCC= 000206        	   75#
LP.HT = 000202        	   75#
LP.OPV= 000212        	   75#
LP.OVP= 000204        	   75#
LP.PLE= 000211        	   75#
LP.SFC= 000203        	   75#
LP.VFR= 000207        	   75#
L.ASTS  000056        	  140#	  285	  289*	  349*	  378*	  424	  430*	  437*	  478	  514	  572*	  575*	  588*
			  609	  613*	  639	  641*	  709*	  772*	  779	  781*	  797*	  828	  836*	  846	  848*
			 1481*	 1497	 1604*	 1677	 1839	 1864	 1867*	 1875*	 1878	 1914	 1917*	 1928	 1935*
L.CAPN  000126        	  182#	  912*	  916*	  924	  926*	  930	  953
L.CAPP  000112        	  171#	  304*	  446	  766	  810*	  818	 1759*
L.CFET  000166        	  198#	  208	  324	  916	 1191	 1735
L.CMSQ  000104        	  168#	  385	  663*	  684	  704
L.COCT  000114        	  175#	 1302*	 1306	 1327*	 1336*	 1419	 1432*	 1456*	 1519*
L.CSR   000002        	  133#	  288*	  426	 1844*	 1849*	 1876	 1924
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-5
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

L.DDMQ  000066        	  157#	  798	  820	  832	  849	 1559	 1836*	 1908	 1910
L.DFET  000200        	  210#	  221	  326	  926	 1195
L.DFSP  000046        	  138#	  526*	 1609	 1781	 1789*
L.DLCQ  000116        	  177#	  520*	  521	  533	  800	  830	  853	 1563	 1598	 1613	 1628
L.DMAD  000132        	  186#	  292*	  293*	 1578*	 1579*	 1590	 1592	 1593*	 1596	 1618*	 1619*	 1626*
L.DMBS  000136        	  187#	  294*	 1580*	 1588*	 1620*	 1627*
L.DMCR  000130        	  185#	  594*	  599*	  625*	  628*
L.DMSG  000124        	  180#	  577*	  633*
L.DMSQ  000123        	  179#	  295*	  568*	  733*	  751	  897*	 1674
L.DMSS  000125        	  181#	  592*	  598*	  629*
L.DTXL  000044        	  136#	  291*	  420	  523	  802	 1574*	 1774*	 1776	 1780*	 1791	 1797*
L.DTXT  000004        	  135#	 1767*	 1768	 1793
L.HUNG  000077        	  161#	  301*	  433	  435*	 1843*	 1850*	 1868*	 1892*
L.IOCN  000100        	  164#	  299*	  394	  456*	  458*	  700*	  759*	  963*	 1652*	 1714*	 1757*
L.IOWT  000102        	  165#	  300*	  391*	  400	  401*	  413
L.LNCT  000113        	  174#	 1342	 1357*	 1455*	 1507	 1518*
L.MFLG  000122        	  178#	  530*
L.MSGA  000160        	  194#	  296*	  297*	 1377	 1378*	 1379*	 1386*	 1387*
L.MSGQ  000154        	  193#	  757	  801	  956	  961	 1389*	 1569
L.MSGS  000164        	  195#	  298*	  758	  761*	  962	  964*	 1375*	 1382*	 1388*	 1581*
L.NFSP  000127        	  183#	  901*	  959	  989*	 1039*
L.NRD   000001        	  132#	  287*	 1239
L.PBRC  000152        	  191#	  605*	  608	 1106*	 1109
L.PGCT  000072        	  158#	  305*	 1708	 1916*	 1952*	 1955
L.PGLM  000074 G      	  159#	 1953	 1955
L.PLBP  000144        	  189#	  341*	  342*	  799	 1402	 1403*	 1404*	 1408	 1441*	 1529*	 1530*	 1542	 1576*
			 1630
L.PLBQ  000140        	  188#	  336*	  339	  381	  637	 1438	 1492*	 1526	 1633
L.PLBS  000150        	  190#	  343*	 1400*	 1407*	 1440	 1442*	 1531*	 1544	 1577*
L.PLNC  000076        	  160#	 1947*	 1948	 1951*	 1962
L.PUBP  000060        	  155#	 1880	 1881	 1888*	 1901*	 1920*
L.PUBS  000064        	  156#	  290*	 1575*	 1882	 1887*	 1900*	 1927*
L.RATT  000111        	  170#	  303*	  438	  440*	  443	  762	  816	  864	  866*	 1485	 1487	 1489*	 1666
			 1716*	 1902*	 1936	 1938*
L.RECO  000110        	  169#	  302*	  415	  417*	  681*
L.SYN   000050        	  139#	 1870
L.TIMC  000000        	  131#
MCB$V0= ****** G      	   83#
MCB$V1= ****** G      	   83#
MSGCTL  001516R    003	  496	  659#
MSGDAT  001062R    003	  493	  495	  514#
MSGFIN  001606R    003	  418*	  679#
MSGQUE  001112R    003	  515	  520#	  661
MSGX    001100R    003	  517#	  539
MS$BYT  004550R    003	  748*	  750*	  752*	  754*	  756*	  893*	  895*	  898*	  902*	  981*	  984*	  986*	  988*
			 1008*	 1015*	 1022*	 1025*	 1034*	 1037*	 1046*	 1052*	 1060*	 1063*	 1375#	 1391
NA.DTO= 000004        	   75#	 1695
NA.FAT= 000001        	   75#	 1680
NA.INK= 000040        	   75#
NA.IVP= 000001        	   75#
NA.JAM= 000020        	   75#
NA.NAC= 000002        	   75#
NA.NOE= 000100        	   75#
NA.OFL= 000002        	   75#	 1684
NA.OMD= 000010        	   75#
NA.OOF= 000040        	   75#
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-6
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

NA.OUF= 000001        	   75#
NA.OVP= 000001        	   75#
NA.PAU= 000004        	   75#	 1688
NA.PF = 000020        	   75#
NA.PSE= 000020        	   75#
NA.RAP= 000040        	   75#
NA.REG= 000100        	   75#
NA.RNA= 000010        	   75#
NC.AUC= 000002        	   75#
NC.AUE= 000001        	   75#
NC.CAB= 000003        	   75#
NC.DMP= 000005        	   75#
NC.PAU= 000006        	   75#
NC.RES= 000007        	   75#
NC.RQC= 000011        	   75#
NC.RQS= 000004        	   75#
ND.ACK= 000001        	   75#	  570
ND.CMP= 000200        	   75#
ND.EOF= 000004        	   75#	  573
ND.IER= 000002        	   75#
NF.CMD= 000001        	   75#	  917	  949	 1011
NF.STD= 000002        	   75#	 1014
NM.ALR= 000004        	   75#	 1648
NM.ATT= 000001        	   75#	 1672
NM.CAP= 000005        	   75#	 1729
NM.CTL= 000003        	   75#	  694	  747
NM.DAT= 000000        	   75#
NM.FTR= 000002        	   75#	  892
NM.OTR= 000006        	   75#
NM.TYP= 000017        	   75#	  483
NOOP    000366R    003	  122	  366#
NRDOTR= 000004        	  484	  486	  497#
NR.ABS= 000000        	   75#
NR.ACC= 000000        	   75#
NR.ACN= 000001        	   75#	  784
NR.ATT= 000000        	   75#
NR.CAP= 000000        	   75#
NR.DMP= 000000        	   75#
NR.DPS= 000000        	   75#
NR.NAB= 000001        	   75#	  804
NR.NDP= 000002        	   75#	  834
NR.NDR= 000002        	   75#	  855
NR.NOB= 000001        	   75#	  822
NR.NOE= 000002        	   75#	  790
NR.NPS= 000001        	   75#	  858
NR.PAU= 000001        	   75#	  839
NR.RES= 000000        	   75#
N.AABC= 000004        	   75#
N.AACK= 000002        	   75#	 1487	 1489
N.ACOD= 000003        	   75#
N.AFLG= 000004        	   75#
N.ALGD= 000002        	   75#
N.APLE= 000005        	   75#	 1902
N.ARQS= 000003        	   75#	  866
N.ASTC= 000001        	   75#	  440	 1938
N.CCMD= 000003        	   75#	  664	  666	  687
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-7
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

N.CRES= 000004        	   75#	  699
N.CSEQ= 000002        	   75#	  688
N.DDAT= 000005        	   75#
N.DFLG= 000003        	   75#
N.DSEQ= 000002        	   75#
N.DSGC= 000004        	   75#
N.FCLS= 000002        	   75#
N.FDAT= 000004        	   75#
N.FFLG= 000001        	   75#
N.FID = 000000        	   75#
N.FRSP= 000003        	   75#
N.FSEQ= 000002        	   75#
N.FSPC= 000004        	   75#
N.MFL = 000001        	   75#
N.NSPC= 000003        	   75#	  959*
N.PCAP= 000003        	   75#
N.PCNT= 000002        	   75#
N.TYP = 000000        	   75#
PGLEN = 000102        	 1948	 1962	 1997#	 2066
PHD$A   000000R       	   83#	   84	   85
PR$BYT  004662R    003	 1304	 1324*	 1356*	 1400#	 1413	 1431*	 1453*	 1516*
PR$CHR  004734R    003	  624*	 1271	 1419#
PR$DQX  005010R    003	 1410*	 1438#	 1548*	 1640
PR$FF   005056R    003	 1339	 1349	 1451#	 1511	 1513
PR$FIN  005104R    003	 1470#	 1560*	 1909*
PR$LF   005264R    003	 1280	 1314*	 1423*	 1506#
PR$NEW  005340R    003	 1412*	 1526#	 1535	 1549
PR$SPC  005404R    003	 1273*	 1277*	 1542#
Q$PURG  005432R    003	  379*	  805	 1557#
RD$BYT  005636R    003	  527*	  529*	  567*	  569*	  576*	  581*	  602*	  732*	  734*	  896*	  899*	  903*	  905*
			  907*	  910*	 1091*	 1096*	 1105*	 1107*	 1126*	 1588#	 1621
RD$DQX  006002R    003	  640*	  746*	  773*	  960*	 1606*	 1626#
SETSTD  003704R    003	  364*	 1132*	 1144#
SN$ALR  006074R    003	  428*	 1645#
SN$ATT  006142R    003	  445*	  764*	 1490*	 1665#	 1939*
SN$CAP  006400R    003	  448*	  769	 1725#
SPA   = 000040        	 1270	 1320
STOPWT  000502R    003	  394#	  414
S$ABO = 000022        	   78#
S$ACC = 000002        	   78#
S$CNR = 000000        	   78#
S$CON = 000000        	   78#
S$DAT = 000002        	   78#
S$DIS = 000020        	   78#
S$DRQ = 000012        	   78#
S$DSR = 000006        	   78#
S$GLN = 000024        	   78#
S$INT = 000004        	   78#	  659
S$IRQ = 000016        	   78#
S$MRQ = 000010        	   78#
S$PBOM= 000001        	   78#
S$PEOM= 000004        	   78#	 1236	 1599	 1607
S$PMOM= 000002        	   78#
S$PMSG= 000002        	   78#
S$PSEG= 000001        	   78#
S$REJ = 000004        	   78#
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-8
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

S$SND = 000006        	   78#	 1238
S$SNI = 000014        	   78#	 1651
S.DSP   000004        	   77#	 1871*
S.EABL= 177755        	   78#
S.EABM= 177770        	   78#
S.EABO= 177767        	   78#	  503	  516	 1499	 1564
S.EABS= 177771        	   78#
S.EACR= 177736        	   78#
S.ECBE= 177764        	   78#
S.EDBO= 177754        	   78#
S.EERR= 177763        	   78#
S.EIDM= 177762        	   78#	  501
S.EINF= 177766        	   78#
S.EIOF= 177773        	   78#
S.ELNS= 177765        	   78#
S.ELST= 177761        	   78#
S.ELWS= 177760        	   78#
S.EMTL= 177757        	   78#
S.ENOF= 177732        	   78#
S.ENRO= 177732        	   78#
S.ENSL= 177756        	   78#
S.ENUR= 177731        	   78#
S.EOTB= 177772        	   78#
S.ERBO= 177754        	   78#	  350	  705
S.ERES= 177777        	   78#
S.ERNS= 177775        	   78#
S.ETMI= 177753        	   78#
S.EUNN= 177776        	   78#
S.EURO= 177774        	   78#
S.LNK   000000        	   77#
S.PDB   000002        	   77#
S.SEOM= 000002        	   78#
S.SSUC= 000001        	   78#	  344	  402	 1496
TIMPIN= ****** GX     	  123
US    = 000037        	  312
VCH1  = 000000        	 2027
VCH2  = 000001        	 2104
VCH3  = 000002        	 2105
VCH4  = 000003        	 2106
VCH5  = 000004        	 2107
VCH6  = 000005        	 2108
VCH7  = 000006        	 2101
VCH8  = 000007        	 2100
VFBP1 = 000001        	 2073
VFBP10= 001000        	 2082
VFBP11= 002000        	 2083
VFBP12= 004000        	 2084
VFBP2 = 000002        	 2074
VFBP3 = 000004        	 2075
VFBP4 = 000010        	 2076
VFBP5 = 000020        	 2077
VFBP6 = 000040        	 2078
VFBP7 = 000100        	 2079
VFBP8 = 000200        	 1512	 2080
VFBP9 = 000400        	 2081
VFU66   007454R    003	 1344	 1509	 2065#	 2070
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-9
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

VFU66S= 000204        	 2070#
VF.6LI= 000001        	   75#
VF.8LI= 000002        	   75#
VT    = 000013        	 1292	 2101
ZZ$SLP  006532R    003	 1394*	 1534*	 1615*	 1767#
ZZ$WAK  006610R    003	  422*	 1789#
$CBBGT= ****** GX     	 1233*
$CBBRT= ****** GX     	  460	 1571*
$CMQRM= ****** GX     	  381	  385	  684	  704	  757	  961	 1438	 1559	 1563	 1569	 1628	 1908
$DSPCR= ****** G      	   93#	   94#	   95#	   96#	  101#	  102#	  110#	  120#
$LEGO   006704R    003	  837	  851*	 1843#
$LEINT  006734RG   003	 1864#
$LEQUE  006656R    003	 1443	 1637	 1835#
$LESTP  006722R    003	  376*	  708*	  771*	  796*	  835*	 1603*	 1835*	 1849#
$LESTR  006674R    003	  711	 1839#
$LTMEN= ****** GX     	  346*
$RDBGT= ****** GX     	  331*
$RDBRT= ****** GX     	  382*
$SCHED= ****** GX     	  387*	  406	  505	  518	  690*	  701	  707*	  760*	  965	 1501	 1566*	 1653*	 1715*
			 1758*
$SYNCH= ****** GX     	 1872
$$    = 000102        	 2065#	 2069#
$$DAT = 000000        	  130#	  274
$$LVL = 000000        	  130#	  274
$$TABG= 001200R    003	   92#	   94	   95	   96	   97	   98	   99	  100	  101	  102	  109#	  111	  112
			  119#	  120	  121	  122	  123	  492#	  537#
.     = 010146R    003	   76#	   77#	   78#	   84#	   85#	   92	   94	   95	   96	   97	   98	   99	  100
			  101	  102	  109	  111	  112	  119	  120	  121	  122	  123	  130#	  131#	  132#
			  133#	  135#	  136#	  137#	  138#	  139#	  140#	  155#	  156#	  157#	  158#	  159#	  160#
			  161#	  164#	  165#	  168#	  169#	  170#	  171#	  174#	  175#	  176#	  177#	  178#	  179#
			  180#	  181#	  182#	  183#	  185#	  186#	  187#	  188#	  189#	  190#	  191#	  192#	  193#
			  194#	  195#	  198#	  199#	  200#	  201#	  202#	  203#	  204#	  205#	  206#	  207#	  208
			  210#	  211#	  212#	  213#	  214#	  215#	  216#	  217#	  218#	  219#	  220#	  221	  238#
			  240#	  241#	  242#	  244#	  245#	  246#	  247#	  249#	  250#	  251#	  252#	  255#	  257#
			  258#	  259#	  261#	  262#	  263#	  265#	  266#	  267#	  268#	  269#	  271#	  272#	  274#
			  492	  497	  537	  726	 1293	 2070	 2093#
.DSPCR= ****** G      	   84#
.P1   = 003777        	 2037	 2069
.P10  = 000220        	 2069
.P100 = 000020        	 2069
.P101 = 000020        	 2069
.P102 = 100020        	 2069
.P11  = 000224        	 2069
.P12  = 000230        	 2069
.P13  = 000664        	 2069
.P14  = 000220        	 2069
.P15  = 000234        	 2069
.P16  = 000220        	 2069
.P17  = 000224        	 2069
.P2   = 000220        	 2069
.P20  = 001630        	 2069
.P21  = 000224        	 2069
.P22  = 000220        	 2069
.P23  = 000234        	 2069
.P24  = 000220        	 2069
.P25  = 000764        	 2069
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 44-10
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- USER SYMBOLS

.P26  = 000230        	 2069
.P27  = 000224        	 2069
.P3   = 000224        	 2069
.P30  = 000220        	 2069
.P31  = 000234        	 2069
.P32  = 000620        	 2069
.P33  = 000224        	 2069
.P34  = 000230        	 2069
.P35  = 000224        	 2069
.P36  = 000220        	 2069
.P37  = 001676        	 2069
.P4   = 000230        	 2069
.P40  = 000220        	 2069
.P41  = 000224        	 2069
.P42  = 000230        	 2069
.P43  = 000224        	 2069
.P44  = 000620        	 2069
.P45  = 000234        	 2069
.P46  = 000220        	 2069
.P47  = 000224        	 2069
.P5   = 000224        	 2069
.P50  = 000230        	 2069
.P51  = 000764        	 2069
.P52  = 000220        	 2069
.P53  = 000234        	 2069
.P54  = 000220        	 2069
.P55  = 000224        	 2069
.P56  = 001630        	 2069
.P57  = 000224        	 2069
.P6   = 000620        	 2069
.P60  = 000220        	 2069
.P61  = 000234        	 2069
.P62  = 000220        	 2069
.P63  = 000664        	 2069
.P64  = 000230        	 2069
.P65  = 000224        	 2069
.P66  = 000220        	 2069
.P67  = 000234        	 2069
.P7   = 000234        	 2069
.P70  = 000620        	 2069
.P71  = 000224        	 2069
.P72  = 000230        	 2069
.P73  = 000224        	 2069
.P74  = 000220        	 2069
.P75  = 004020        	 2069
.P76  = 000020        	 2069
.P77  = 000020        	 2069
.RDBSZ= ****** GX     	 1439	 1531
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 45
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- MACRO NAMES

CALLR	  108	  118	  406	  460	  488	  505	  518	  661	  701	  711	  769	  805	  837	  951	  965
	 1123	 1130	 1134	 1135	 1271	 1280	 1284	 1304	 1339	 1349	 1443	 1501	 1549	 1637	 1640
	 1872
CCBDF$	   73#	   76
CHR$B	  130#
CHR$W	  130#
COR$D	  130#
CSR$W	  130#	  133
CTL$B	  130#
CTL$W	  130#
DAT$	   74#	  130
DAT$DF	  130#
DEFPAR	 2019#
DEQ$	  381	  385	  684	  704	  757	  961	 1438	 1559	 1563	 1569	 1628	 1908
DSP$	   74#	   92#	   93	   94	   95	   96	   97	   98	   99	  100	  101	  102	  109#	  110	  111
	  112	  119#	  120	  121	  122	  123	  492#	  493	  494	  495	  496	  498	  537#	  538	  539
	  540	  541
DSP$B	   74#	   92	  109	  119	  492	  537
DSP$E	   74#	   92#	  103	  109#	  113	  119#	  124	  492#	  499	  537#	  542
DSR$W	  130#
END$	   74#	  130#	  274
ENQ$	  336	  520	  663	 1389	 1492	 1836
LIX$B	  130#
LIX$W	  130#
LST$D	  130#	  157	  168	  177	  188	  193
MAP$	   74#	  480	  685	  692	  957	 1377	 1402	 1590	 1880	 1919
NURDF$	   73#	   75
PHD$B	   74#	   83
PHD$D	   83#	   84
PHD$E	   83#	   85
PHD$I	   83#
PHD$S	   83#
POP$S	   74#	  352	  390	  691	  742	  755	  987	 1122	 1129	 1165	 1180	 1209	 1213	 1240	 1390
	 1393	 1454	 1477	 1517	 1582	 1636	 1639	 1717	 1753
PUSH$S	   74#	  284	  375	  683	  738	  745	  967	  969	  971	  973	  975	  977	  979	 1118	 1124
	 1159	 1170	 1192	 1231	 1383	 1451	 1472	 1514	 1557	 1632	 1665	 1731	 1734
RETURN	  366	  397	  450	  535	  642	  682	  768	  774	  782	  785	  791	  811	  823	  840	  859
	  867	 1147	 1168	 1182	 1211	 1215	 1241	 1328	 1359	 1380	 1405	 1433	 1457	 1493	 1520
	 1532	 1546	 1583	 1594	 1610	 1654	 1718	 1760	 1783	 1804	 1845	 1851	 1866	 1941	 1958
	 1972
SCDF$	   73#	   78
SETCHN	 2011#
SMAP$	   74#
STA$B	  130#
STA$W	  130#
SYNDF$	   73#	   77
SYN$X	  130#	  139
TMB$X	  130#
TRB$B	  130#
TRB$W	  130#
UNT$B	  130#
UNT$W	  130#
VFY$	  130#
WRDVFU	 2015#	 2069
.ZER	 2007#
LE	LP11 LLC AND DRIVER	DNMAC X24.07-563  04-JAN-83  16:26  PAGE 45-1
LE.M11    30-DEC-82 03:53		CROSS REFERENCE TABLE -- MACRO NAMES


. ABS.  000246     000	   OVR   RW    REL   LCL   D  
        000040     001	   CON   RW    REL   LCL   I  
$PLIT$  000052     002	   CON   RO    REL   LCL   D  
$CODE$  010146     003	   CON   RO    REL   LCL   I  


 ERRORS DETECTED:  0
 DEFAULT GLOBALS GENERATED:  10

 LE,LE/CRF=MCB:MCBLIB.M11/PA:1,MCB:SCLIB.M11/PA:1,DSK:URDLIB.M11/PA:1,LE
 RUN-TIME: 6 6 1 SECONDS
 RUN-TIME RATIO: 92/15=6.0
 CORE USED:  14K  (27 PAGES)