Google
 

Trailing-Edge - PDP-10 Archives - BB-H348C-RM_1982 - swskit-v21/listings/rsx11s/error.list
There are no other files named error.list in the archive.
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3


      1						.TITLE	ERROR
      2						.IDENT	/03/
      3
      4					;
      5					; COPYRIGHT (C) 1974, 1978
      6					; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
      7					;
      8					; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
      9					; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
     10					;
     11					; VERSION 03
     12					;
     13					; GARY H. MENDELSOHN 19-MAY-75
     14					;
     15					; PREVIOUSLY MODIFIED BY:
     16					;
     17					;	T. J. MILLER
     18					;
     19					; MODIFIED BY:
     20					;
     21					;	D. L. GIRDLER 10-MAY-77
     22					;
     23					;		DLG001 -- DON'T INCREMENT ERROR COUNT IF ERROR
     24					;			LOGGING IS NOT TURNED ON.
     25					;
     26					;	E. L. BAATZ 13-NOV-77
     27					;
     28					;		EB099 -- GUARANTEE THAT $QEMB, $ALEB1, $DVERR, AND
     29					;			$DVCER WILL ALWAYS BE DEFINED
     30					;
     31					; ERROR LOGGING
     32					;
     33
     34						.IF DF	E$$DVC!E$$NSI!E$$PER
     35
     36					;
     37					; EQUATED SYMBOLS
     38					;
     39
     40					WRTLIM=520.			;LOGGER WRITE THRESHOLD
     41					ERRTIM=5.*K$$TPS		;TIME LIMIT IN QUEUE BEFORE WRITE
     42
     43						.IFTF
     44
     45						.MCALL	HWDDF$
     46	000000					HWDDF$			;DEFINE CPU REGISTERS
     47
     48						.IFT
     49
     50					;
     51					; MACRO LIBRARY CALLS
     52					;
     53
     54						.MCALL	CLKDF$,HDRDF$,PCBDF$,PKTDF$,TCBDF$
     55						CLKDF$			;DEFINE CLOCK OFFSETS AND CODES
     56						HDRDF$			;DEFINE TASK HEADER OFFSETS
     57						PCBDF$			;DEFINE PARTITION OFFSETS
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3-1


     58						PKTDF$			;DEFINE I/O PACKET OFFSETS
     59						TCBDF$			;DEFINE TASK CONTROL BLOCK OFFSETS AND CODES
     60														;**-20
     61					;
     62					; LOCAL STORAGE
     63					;
     64
     65						.IF DF	E$$DVC
     66
     67					;
     68					; DEVICE TIMEOUT STORAGE
     69					;
     70
     71					DTOTMP:	.BLKW	1		;SAVED CSR CONTENTS
     72
     73						.ENDC
     74
     75						.IF DF	E$$NSI
     76
     77					;
     78					; NONSENSE INTERRUPT STORAGE
     79					;
     80					; ADJACENCY ASSUMED
     81					;
     82
     83						.BLKW	3		;FORK BLOCK
     84					TEMP:	.BLKB	1		;PS STORAGE
     85					NSI:	.BYTE	-1		;RECURSION COUNTER
     86					OPS:	.BLKW	1		;OLD PS STORAGE
     87					OPC:	.BLKW	1		;OLD PC STORAGE
     88
     89						.ENDC
     90
     91					;+
     92					; **-$ALEMB-ALLOCATE AN ERROR MESSAGE BLOCK
     93					; **-$ALEB1-ALLOCATE AN ERROR MESSAGE BLOCK (ALTERNATE ENTRY)
     94					;
     95					; THIS ROUTINE IS CALLED BY ERROR SERVICING
     96					; ROUTINES.  IT COUNTS THE OCCURENCE OF THE ERROR AND TRIES
     97					; TO ALLOCATE A CORE BLOCK FROM THE POOL.
     98					; IF IT IS SUCCESFUL, IT FILLS IN THE ERROR CODE, THE TIME AND THE
     99					; ERROR SEQUENCE NUMBER. ELSE, IT RETURNS WITH C-SET.
    100					;
    101					; INPUTS:
    102					;
    103					;	2(SP)=ERROR CODE
    104					;	0(SP)=RETURN
    105					;	  R1 =SIZE OF THE EMB TO ALLOCATE
    106					;
    107					; OUTPUTS:
    108					;
    109					;	IF C-CLEAR:
    110					;	(R0)=ADDRESS OF THE FIRST UNFILLED BYTE
    111					;	(R1)=ADDRESS OF THE EMB
    112					;
    113					;	IF C-SET, UNSUCCESSFUL
    114					;
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3-2


    115					; NOTE:	R2 AND R3 ARE DESTROYED BY $ALEMB THRU $ALOCB
    116					;-
    117
    118						.ENABL	LSB							;DLG001
    119					$ALEMB::TST	$ERRPT		;ERROR LOG TURNED ON?			;DLG001
    120						SEC			;ASSUME NO ALLOCATION			;DLG001
    121						BEQ	20$		;IF EQ NO, DON'T COUNT ERROR		;DLG001
    122						INC	$ERRSQ		;COUNT THE ERROR			;DLG001
    123					$ALEB1::SEC			;ASSUME ALLOCATION WILL NOT OCCUR	;**-1
    124						MOV	$ERRPT,R0	;ERROR LOGGING TURNED ON?
    125						BEQ	20$		;IF EQ NO
    126						MOV	$ERRLM,R0	;IS THERE ROOM AVAILABLE?
    127						BMI	20$		;NO IF MI
    128						CALL	$ALOCB		;ALLOCATE THE EMB
    129						BCS	20$		;UNSUCCESSFUL IF CS
    130						SUB	R1,$ERRLM	;UPDATE ROOM LEFT
    131						MOV	R1,E.SIZE+2(R0)	;FILL IN SIZE OF EMB
    132						MOV	R0,R1		;COPY EMB POINTER
    133						CMP	(R0)+,(R0)+	;ADVANCE OVER LINK AND E.SIZE
    134						MOV	2(SP),(R0)+	;FILL CODE
    135						MOV	#$TTNS,R2	;POINT PAST CURRENT SECOND
    136					10$:	DEC	R2		;SKIP BYTE
    137						MOVB	-(R2),(R0)+	;FILL TIME
    138						CMP	R2,#$TTNS-14	;DONE YET?
    139						BHI	10$		;IF HI NO
    140						MOV	$ERRSQ,(R0)+	;FILL SEQUENCE NUMBER
    141						CLC			;INDICATE SUCCESS
    142					20$:	MOV	(SP)+,(SP)	;REMOVE ERROR CODE
    143						RETURN			;EXIT
    144						.DSABL	LSB							;DLG001
    145					 									; EB099
    146						.IFF								; EB099
    147					 									; EB099
    148	000000				$ALEB1::			;					; EB099
    149
    150						.ENDC
    151
    152						.IF DF	E$$DVC
    153
    154					;+
    155					; **-$BMSET-SET A DRIVER'S BIT IN THE I/O ACTIVE BITMAP
    156					;
    157					; THIS COROUTINE RAISES PROCESSOR PRIORITY TO SEVEN AND
    158					; SETS THE MASK IN THE SCB IN $IOABM,
    159					; LETS THE CALLER START THE FUNCTION, AND THEN,
    160					; ALLOWS INTERRUPTS.
    161					;
    162					; INPUTS:
    163					;
    164					;	(R4)=ADDRESS OF THE SCB
    165					;
    166					; OUTPUTS:
    167					;
    168					;	$IOABM IS MODIFIED AND RETURN IS MADE AT PR7
    169					;-
    170
    171					$BMSET::MTPS	#PR7		;LOCK OUT INTERRUPTS
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3-3


    172						BIS	S.BMSK(R4),$IOABM ;;;UPDATE BITMAP
    173						CALL	@(SP)+		;;;CALL THE CALLER
    174						MTPS	#0		;;;ALLOW INTERRUPTS AND CLEAR C.
    175						RETURN			;EXIT
    176
    177					;+
    178					; **-$DTOER-DEVICE TIMEOUTS
    179					;
    180					; THIS IS THE EMB FORMATTING ROUTINE WHEN
    181					; TIMEOUT ERRORS ARE RECOGNIZED BY THE DRIVER. ON THE
    182					; FIRST OCCURENCE OF AN ERROR, $DTOER ATTEMPTS TO LOG IT.
    183					; IF ERRORS OCCUR ON RETRIES, THEY ARE NOT LOGGED.
    184					;
    185					; THE ERROR CODE EC.DTO IS PUSHED ON THE STACK,
    186					; THE ERROR IN PROGRESS BIT IS SET IN THE SCB, THE LENGTH OF THE
    187					; REQUIRED EMB IS CALCULATED AND $ALEMB IS CALLED. IF $ALEMB FAILS
    188					; TO ALLOCATE A PACKET FOR ANY REASON, $DTOER EXITS
    189					; AND THE POINTER IN THE SCB TO THE EMB IS CLEARED.
    190					; ELSE, THE SAVED $IOABM IS COPIED FROM THE SCB TO THE EMB AND
    191					; A POINTER TO THE EMB IS SAVED IN THE SCB. THE ERROR INFORMATION
    192					; INCLUDING DEVICE REGISTERS IS PUT INTO THE EMB AND THE
    193					; RETURN IS MADE. THE CONTENTS OF THE CSR THAT IS SAVED IS UNCHANGED
    194					; FROM THE TIME OF TIMEOUT. AFTER THE CSR IS SAVED, DEVICE INTERRUPTS
    195					; ARE DISABLED AND CPU PRIORITY IS LOWERED TO PR0.
    196					;
    197					; INPUTS:
    198					;
    199					;	(R2)=ADDRESS OF THE CSR
    200					;	(R4)=ADDRESS OF THE SCB
    201					;
    202					; OUTPUTS:
    203					;
    204					;	C=0 IF FUNCTION WAS NOT A USER-MODE DIAGNOSTIC FUNCTION
    205					;		THE EMB IS FILLED AND THE SCB CONTAINS A POINTER
    206					;		TO IT AND ERROR IN PROGRESS FLAG IS SET IN THE SCB.
    207					;	C=1 IF FUNCTION WAS A USER-MODE DIAGNOSTIC FUNCTION.
    208					;		IN THIS CASE ONLY INTERRUPT ENABLE IS CLEARED AND
    209					;		THE PRIORITY IS LOWERED TO 0.
    210					;
    211					; NOTE:	IF THE SYSTEM SUPPORTS DIAGNOSTICS R1 WILL BE SET TO THE	;DLG001
    212					;	I/O PACKET ADDRESS.  IF DIAGNOSTICS ARE NOT SUPPORTED, ALL	;DLG001
    213					;	REGISTERS ARE PRESERVED.					;DLG001
    214					;-									;**-2
    215
    216						.IFTF
    217
    218						.ENABL	LSB
    219	000000				$DTOER::			;;;REFERENCE LABEL
    220
    221						.IFT
    222
    223						MOV	(R2),DTOTMP	;;;SAVE CSR CONTENTS
    224
    225						.IFTF
    226
    227	000000	042712 	000100 			BIC	#100,(R2)	;;;TURN OFF DEVICE INTERRUPTS
    228	000004					MTPS	#0		;;;ALLOW INTERRUPTS
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3-4


    229
    230
    231						.IF DF	D$$IAG
    232
    233						MOV	S.PKT(R4),R1	;PICK UP ADDRESS OF I/O PACKET
    234						SEC			;ASSUME USER-MODE DIAGNOSTIC FUNCTION
    235						BITB	#IQ.UMD,I.FCN(R1) ;DIAGNOSTIC FUNCTION?
    236						BNE	100$		;IF NE YES
    237						CLC			;INDICATE CSR SAVED			;DLG001
    238
    239						.ENDC
    240
    241
    242						.IFT
    243
    244						MOV	#EC.DTO,-(SP)	;INDICATE DEVICE TIMEOUT
    245						BR	10$		;ENTER COMMON CODE
    246
    247					;+
    248					; **-$DVCER-DEVICE ERROR BIT SET
    249					;
    250					; THIS IS THE EMB FORMATTING ROUTINE WHEN DEVICE ERROR BIT
    251					; ERRORS ARE RECOGNIZED BY THE DRIVER. ON THE
    252					; FIRST OCCURENCE OF AN ERROR, $DVCER ATTEMPTS TO LOG IT.
    253					; IF ERRORS OCCUR ON RETRIES, THEY ARE NOT LOGGED.
    254					;
    255					; THE ERROR CODE EC.DVC IS PUSHED ON THE STACK,
    256					; THE ERROR IN PROGRESS BIT IS SET IN THE SCB, THE LENGTH OF THE
    257					; REQUIRED EMB IS CALCULATED AND $ALEMB IS CALLED. IF $ALEMB FAILS
    258					; TO ALLOCATE A PACKET FOR ANY REASON, $DVCER EXITS.
    259					; AND THE POINTER IN THE SCB TO THE EMB IS CLEARED.
    260					; ELSE, THE SAVED $IOABM IS COPIED FROM THE SCB TO THE EMB AND
    261					; A POINTER TO THE EMB IS SAVED IN THE SCB. THE ERROR INFORMATION
    262					; INCLUDING DEVICE REGISTERS IS PUT INTO THE EMB AND THE
    263					; RETURN IS MADE.
    264					;
    265					; INPUTS:
    266					;
    267					;	(R4)=ADDRESS OF THE SCB
    268					;
    269					; OUTPUTS:
    270					;
    271					;	IF SUCCESSFUL, THE EMB IS FILLED, AND THE SCB
    272					;	CONTAINS A POINTER TO IT. AN ERROR IN PROGRESS BIT
    273					;	IS SET IN THE SCB. ELSE, THE OCCURRENCE OF
    274					;	THE ERROR IS COUNTED ONLY.
    275					;
    276					; NOTE:	ALL REGISTERS ARE PRESERVED
    277					;-
    278
    279					$DVERR::			; TEMPORARY * * *
    280					$DVCER::MOV	#EC.DVC,-(SP)	;INDICATE DEVICE ERROR
    281						SEC			;INDICATE NO CSR ADDRESS
    282					10$:	MOV	R2,-(SP)	;SAVE R2
    283						MOV	R1,-(SP)	;SAVE R1
    284						MOV	R0,-(SP)	;SAVE R0
    285						MOV	R2,-(SP)	;SAVE CSR ADDRESS
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3-5


    286						BCC	20$		;WAS THAT A CSR ADDRESS?
    287						CLR	(SP)		;NO IF CS
    288					20$:	MOV	10(SP),-(SP)	;MOVE ERROR CODE
    289						MOV	R3,12(SP)	;SAVE R3
    290
    291					;
    292					; AT THIS POINT THE STACK CONTAINS:
    293					;
    294					;	 0(SP)=ERROR CODE
    295					;	 2(SP)=CSR ADDRESS OR 0
    296					;	 4(SP)=SAVED R0
    297					;	 6(SP)=SAVED R1
    298					;	10(SP)=SAVED R2
    299					;	12(SP)=SAVED R3
    300					;	14(SP)=RETURN
    301					;
    302						BITB	#SP.EIP!SP.ENB,S.PRI(R4) ;ERROR IN PROGRESS OR LOGGING OFF?
    303						BNE	80$		;YES IF NE
    304						BISB	#SP.EIP,S.PRI(R4) ;INDICATE ERROR IN PROGRESS
    305						MOVB	S.RCNT(R4),R1	;GET NUMBER OF DEVICE REGS
    306						ASL	R1		;MAKE BYTE COUNT
    307						ADD	#E.LGTH+2,R1	;MAKE REQUIRED EMB SIZE
    308						CALL	$ALEMB		;TRY TO GET AN EMB
    309						BCC	30$		;SUCCESS IF CC
    310						CLR	S.BMSV(R4)	;INDICATE NO EMB
    311						BR	90$		;AND EXIT
    312					30$:	MOV	S.BMSV(R4),(R0)+ ;FILL SAVED BITMAP
    313						MOV	R1,S.BMSV(R4)	;SAVE POINTER TO EMB
    314						MOV	S.PKT(R4),R1	;GET I/O PACKET ADDRESS
    315						CLR	(R0)+		;SAVE ROOM FOR RETRY COUNTS
    316						MOV	I.TCB(R1),R2	;GET TCB ADDRESS
    317						MOV	T.PRI(R2),(R0)+	;FILL I/O CNT (AND PRIORITY)
    318						MOV	T.NAM(R2),(R0)+	;FILL TASK NAME
    319						MOV	T.NAM+2(R2),(R0)+ ;
    320						MOV	T.PCB(R2),R2	;GET PCB ADDRESS
    321						MOV	P.REL(R2),(R0)+	;FILL 1/64TH REAL ADDRESS
    322						MOV	P.HDR(R2),R2	;POINT TO HEADER
    323						MOV	H.CUIC(R2),(R0)+ ;FILL TASK UIC
    324						MOV	I.UCB(R1),(R0)+	;FILL DEVICE ID
    325						MOV	I.FCN(R1),(R0)+	;FILL FUNCTION CODE
    326						ADD	#I.PRM,R1	;POINT TO PARAMETERS
    327						MOV	#7,R2		;SET UP LOOP
    328					40$:	MOV	(R1)+,(R0)+	;FILL PARAMETERS
    329						DEC	R2		;DONE?
    330						BNE	40$		;NO IF NE
    331						MOVB	S.RCNT(R4),R2	;GET NUMBER OF DEVICE REGS
    332						MOV	R2,(R0)+	;FILL REG COUNT
    333						MOVB	S.ROFF(R4),R1	;GET OFFSET OF FIRST REG FROM CSR
    334						ADD	S.CSR(R4),R1	;POINT TO FIRST REG
    335					50$:	CMP	R1,(SP)		;IS THIS THE CSR?
    336						BNE	60$		;NO IF NE
    337						MOV	DTOTMP,(R0)+	;FILL SAVED CSR CONTENTS
    338						TST	(R1)+		;ADJUST R1
    339						BR	70$		;
    340					60$:	MOV	(R1)+,(R0)+	;FILL REGISTER
    341					70$:	DEC	R2		;DONE?
    342						BNE	50$		;NO IF NE
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3-6


    343						BR	90$		;
    344					80$:	TST	(SP)+		;REMOVE ERROR CODE
    345					90$:	TST	(SP)+		;REMOVE CSR ADDRESS
    346						MOV	(SP)+,R0	;RESTORE R0
    347						MOV	(SP)+,R1	;RESTORE R1
    348						MOV	(SP)+,R2	;RESTORE R2
    349						MOV	(SP)+,R3	;RESTORE R3
    350
    351						.IFTF
    352
    353	000010				100$:	RETURN			;EXIT
    354						.DSABL	LSB
    355					 									; EB099
    356						.IFF								; EB099
    357					 									; EB099
    358	000012				$DVERR::			;					; EB099
    359	000012				$DVCER::			;					; EB099
    360
    361						.ENDC
    362
    363						.IF DF	E$$NSI
    364
    365					;+
    366					; **-$NS0,$NS1,$NS2,$NS3,$NS4,$NS5,$NS6,$NS7-
    367					;	NONSENSE INTERRUPT IDENTIFIER ROUTINES
    368					;
    369					; EACH OF THESE ROUTINES IS VECTORED TO BY ONE OF A GROUP OF 16
    370					; UNUSED VECTORS.  THE VECTORS ARE SUB-CODED IN THE PS CONDITION CODES.
    371					;-
    372
    373					$NS0:	:CALL	NSIER		;;;CALL COMMON CODE
    374						.WORD	0		;;;GROUP 0-17
    375					$NS1::	CALL	NSIER		;;;
    376						.WORD	20		;;;GROUP 20-37
    377					$NS2::	CALL	NSIER		;;;
    378						.WORD	40		;;;GROUP 40-57
    379					$NS3::	CALL	NSIER		;;;
    380						.WORD	60		;;;GROUP 60-77
    381					$NS4::	CALL	NSIER		;;;
    382						.WORD	100		;;;GROUP 100-117
    383					$NS5::	CALL	NSIER		;;;
    384						.WORD	120		;;;GROUP 120-137
    385					$NS6::	CALL	NSIER		;;;
    386						.WORD	140		;;;GROUP 140-157
    387					$NS7::	CALL	NSIER		;;;
    388						.WORD	160		;;;GROUP 160-177
    389
    390					;+
    391					; **-NSIER-NONSENSE INTERRUPT ERRORS
    392					;
    393					; THIS ROUTINE IDENTIFIES THE INTERRUPTING VECTOR AND LOGS
    394					; THE ERROR.
    395					;
    396					; INPUTS:
    397					;
    398					;	@(SP)=BITS 06:04 OF UNUSED VECTOR NUMBER
    399					;
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3-7


    400					; OUTPUTS:
    401					;
    402					;	AN EMB IS ALLOCATED AND QUEUED TO THE LOGGER WHICH
    403					;	CONTAINS THE VECTOR NUMBER AND THE I/O ACTIVE BITMAP.
    404					;-
    405
    406					NSIER:	MFPS	-(SP)		;;;SAVE VECTOR ID(MODULO 20)
    407						INCB	NSI		;;;NSI IN PROGRESS?
    408						BEQ	10$		;;;NO IF EQ
    409						CMP	(SP)+,(SP)+	;;;YES, CLEAR STACK
    410						RTI			;;;AND RETURN
    411					10$:	BIC	#177760,(SP)	;;;ISOLATE VECTOR ID(MOD 20)
    412						MOV	(SP)+,TEMP	;;;SAVE VECTOR ID(MOD 20)
    413						BIS	@(SP)+,TEMP	;;;ADD GROUP BIAS
    414						MOV	(SP),OPC	;;;SAVE PREINTERRUPT PC
    415						MOV	2(SP),OPS	;;;SAVE PREINTERRUPT PS
    416						CALL	$INTSV,PR7	;;;SWITCH STACKS
    417						MOV	$IOABM,R5	;;;COPY IOABM
    418						MOV	#TEMP,R4	;;;POINT PAST FORK BLOCK
    419						CALL	$FORK1		;;;AND FORK,SAVING R5
    420						MOV	#E.OPC+2+2,R1	;SET
    421						MOV	#EC.NSI,-(SP)	; UP TO
    422						CALL	$ALEMB		;  CREATE EMB
    423						BCS	20$		;FAILED IF CS
    424						MOV	R5,(R0)+	;FILL BITMAP
    425						MOV	TEMP,(R0)+	;FILL ID AND COUNT
    426						MOV	OPS,(R0)+	;FILL OLD PS
    427						MOV	OPC,(R0)	;FILL OLD PC
    428						MOV	#$QEMB,-(SP)	;SET UP TO CALL $QEMB
    429					20$:	MOV	#-1,TEMP	;RESET RECURSION COUNTER
    430						RETURN			;EXIT
    431
    432						.ENDC
    433
    434						.IF DF	E$$DVC!E$$NSI
    435
    436					;+
    437					; **-$QEMB-QUEUE AN EMB
    438					;
    439					; THIS IS THE COMMON POINT FOR ALL EMBS. THE EMB IS QUEUED
    440					; FIFO IN THE ERROR QUEUE.  IF THERE ARE
    441					; ENOUGH BYTES OF EMBS IN THE POOL, THE LOGGER TASK IS AWAKENED.
    442					; ELSE, IF THE QUEUE WAS EMPTY, A SCHEDULE REQUEST IS MADE
    443					; SO A QUEUED EMB WILL BE WRITTEN WITHIN A TIME LIMIT.
    444					; ELSE, A RETURN IS MADE.
    445					;
    446					; INPUTS:
    447					;
    448					;	(R1)=ADDRESS OF THE EMB
    449					;
    450					; OUTPUTS:
    451					;
    452					;	THE EMB IS QUEUED. CONDITIONALLY, THE LOGGER IS WAKED
    453					;	OR A SCHEDULE REQUEST IS MADE FOR THE LOGGER
    454					;
    455					; NOTE: REGISTERS R0-R3 ARE DESTROYED
    456					;-
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3-8


    457
    458						.ENABL	LSB
    459					$QEMB::	SAVNR			;SAVE R4 AND R5
    460						MOV	$ERRPT,R5	;GET ERRLOG TCB
    461						BEQ	30$		;NOT INITIALIZED IF EQ
    462						MOV	#$ERRHD,R0	;POINT TO ERROR QUEUE LISTHEAD
    463						MOV	(R0),-(SP)	;SAVE CONTENTS OF LISTHEAD
    464						CALL	$QINSF		;QUEUE THE EMB FIFO
    465						ADD	E.SIZE+2(R1),$ERRSZ ;UPDATE POOL USAGE
    466						CMP	$ERRSZ,#WRTLIM	;ENOUGH TO WRITE
    467						BGE	10$		;YES IF GE
    468						TST	(SP)+		;WAS ERROR QUEUE EMPTY?
    469						BNE	20$		;NO IF NE
    470
    471					;
    472					; ERROR QUEUE WAS EMPTY. SET A SCHEDULE REQUEST FOR THE
    473					; LOGGER AT ERRTIM FROM NOW, SO THAT THE EMB WILL BE
    474					; WRITTEN IF NO MORE ERRORS OCCUR BEFORE THEN.
    475					;
    476
    477						MOV	#C.LGTH,R1	;SIZE OF CLOCK QUEUE ENTRY
    478						CALL	$ALOCB		;TRY TO GET SOME CORE
    479						BCS	15$		;UNAVAILABLE IF CS
    480						CLR	C.UIC(R0)	;INDICATE DEFAULT UIC
    481						CLR	R1		;HIGH TIME=0
    482						MOV	#ERRTIM,R2	;LOW TIME
    483						MOV	#C.SSHT,R4	;SINGLE-SHOT TASK REQUEST
    484						CALLR	$CLINS		;MAKE REQUEST
    485
    486					;
    487					; REQUEST THE LOGGER NOW
    488					;
    489
    490					10$:	TST	(SP)+		;CLEAN STACK
    491					15$:	MOV	R5,R0		;COPY LOGGER TCB
    492						TST	T.STAT(R0)	;ERRLOG RUNNING?
    493						BPL	20$		;YES IF PL
    494						CLR	R1		;INDICATE DEFAULT UIC
    495						CALLR	$TSKRT		;REQUEST LOGGER
    496					20$:	RETURN			;EXIT
    497					30$:	CRASH			;NO ERRORS ARE QUEUED IF
    498									;NO LOGGER IS PRESENT
    499						.DSABL	LSB
    500					 									; EB099
    501						.IFF								; EB099
    502					 									; EB099
    503	000012				$QEMB::				;					; EB099
    504
    505						.ENDC
    506
    507		000001 				.END
ERROR	MACRO M1110  22-AUG-79 07:05  PAGE 3-9
SYMBOL TABLE

A$$CHK= 000000   	G$$TTK= 000000   	L$$DRV= 000000   	P$$RTY= 000000   	UISAR4= 177650
A$$CPS= 000000   	H$$RTZ= 000074   	MPAR  = 172100   	P$$TPT= 000000   	UISAR5= 177652
A$$TRP= 000000   	I$$RDN= 000000   	MPCSR = 177746   	R$$DER= 000000   	UISAR6= 177654
CMODE = 140000   	KDSAR0= 172360   	M$$CRB= 000124   	R$$EXV= 000000   	UISAR7= 177656
C$$ORE= 002000   	KDSDR0= 172320   	M$$MGE= 000000   	R$$SND= 000000   	UISDR0= 177600
FE.CAL= 000040   	KISAR0= 172340   	M$$NET= 000000   	R$$11M= 000000   	UISDR4= 177610
FE.CEX= 020000   	KISAR5= 172352   	M$$NT2= 000000   	R$$11S= 000000   	UISDR5= 177612
FE.DRV= 000010   	KISAR6= 172354   	N$$LDV= 000001   	SISDR0= 172200   	UISDR6= 177614
FE.EXP= 000200   	KISAR7= 172356   	PIRQ  = 177772   	SR0   = 177572   	UISDR7= 177616
FE.EXT= 000001   	KISDR0= 172300   	PMODE = 030000   	SR3   = 172516   	V$$CTR= 001200
FE.EXV= 000004   	KISDR6= 172314   	PR0   = 000000   	SWR   = 177570   	V$$RSN= 000031
FE.LSI= 000400   	KISDR7= 172316   	PR1   = 000040   	S$$YSZ= 001740   	X$$DBT= 000000
FE.MUP= 000002   	K$$CNT= 177546   	PR4   = 000200   	TPS   = 177564   	$ALEB1  000000RG
FE.MXT= 040000   	K$$CSR= 177546   	PR5   = 000240   	UBMPR = 170200   	$DTOER  000000RG
FE.NLG= 100000   	K$$IEN= 000115   	PR6   = 000300   	UDSAR0= 177660   	$DVCER  000012RG
FE.PKT= 000100   	K$$LDC= 000001   	PR7   = 000340   	UDSDR0= 177620   	$DVERR  000012RG
FE.PLA= 000020   	K$$TPS= 000074   	PS    = 177776   	UISAR0= 177640   	$QEMB   000012RG
G$$TPP= 000000   	L$$ASG= 000000

. ABS.	000000	   000
      	000012	   001
ERRORS DETECTED:  0

VIRTUAL MEMORY USED:  1913 WORDS  ( 8 PAGES)
DYNAMIC MEMORY:  2980 WORDS  ( 11 PAGES)
ELAPSED TIME:  00:00:19
[11,24]ERROR,SY0:[11,34]ERROR/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,ERROR