Google
 

Trailing-Edge - PDP-10 Archives - AP-4172F-BM - 3a-sources/syserd.mac
There are 16 other files named syserd.mac in the archive. Click here to see a list.
;<BAKER.SYSERR>SYSERD.MAC.14, 14-Aug-78 12:02:23, Edit by BAKER
;<BAKER.SYSERR>SYSERD.MAC.13, 14-Aug-78 10:43:11, Edit by BAKER
;<BAKER.SYSERR>SYSERD.MAC.11, 11-Aug-78 17:20:06, Edit by BAKER
;ADD RDERA TO BUGxxx ENTRY - CHANGE PROCESSOR FOR NEW AOBJ OFFSET
;<BAKER.SYSERR>SYSERD.MAC.9, 28-Jul-78 13:41:29, Edit by BAKER
;<BAKER.SYSERR>SYSERD.MAC.8, 21-Jul-78 13:23:15, Edit by BAKER
;<BAKER.SYSERR>SYSERD.MAC.7, 20-Jul-78 17:22:13, Edit by BAKER
;<BAKER.SYSERR>SYSERD.MAC.6, 20-Jul-78 15:27:41, Edit by BAKER
;ADD SUPPORT FOR KS HALT STATUS BLOCK
;<BAKER.SYSERR>SYSERD.MAC.5, 12-Jul-78 14:17:29, Edit by BAKER
;<BAKER.SYSERR>SYSERD.MAC.4, 12-Jul-78 11:49:44, Edit by BAKER
;<BAKER.SYSERR>SYSERD.MAC.3, 12-Jul-78 11:23:13, Edit by BAKER
;<BAKER.SYSERR>SYSERD.MAC.2, 11-Jul-78 09:58:20, Edit by DRUEKE
;FIX ENTRY SWITCH & HALT STATUS BLOCK
;<SYSERR>SYSERD.MAC.4, 30-Jun-78 16:01:29, EDIT BY IQL-BAKER
;<SYSERR>SYSERD.MAC.3, 30-Jun-78 15:44:51, EDIT BY IQL-BAKER
;ADD KS10 CONI APR BIT TO TEXT TRANSLATION
;<SYSERR>SYSERD.MAC.2, 22-Jun-78 14:50:32, EDIT BY IQL-BAKER
;<SYSERR>SYSERD.MAC.1, 22-Jun-78 11:19:50, EDIT BY WOJCIK
;HERE WE BEGIN TO TRACK EDITS



	TITLE	SYSERD -- SYSTEM ERROR FILE PROCESSOR -- MAINLINE CODE
	SUBTTL	VERSION 12(763)		K. COYE/ RLD/ PJB/ ES/ TJW





;COPYRIGHT (C) 1972,1975,1977,1978 BY
;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
;TRANSFERED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
;AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.




	SEARCH	SYRUNV
	SEARCH	SYRLOW
;*;	SEARCH	SCNMAC

	.REQUIRE SYRLIB


	;DUMALL -- DUMMY MACRO LEVEL 3
	;SUBMACRO DUMXXX
	;ARGS
	;NONE USED TO HOUSE LEVEL 2 SUBMACRO DUMXXX
	;THOSE DEFINED HERE ARE THOSE FULLY PROCESSED BY
	;THIS SEGMENT. PART OF EDIT #120.

	DEFINE	DUMALL<
	DUM101
	DUM102
	DUM111
	DUM112
	DUM130
	DUM131
	DUM133			;[756]
	DUM160
	DUM161
	DUM162			; [614]
	DUM163			;[740]
>

	;EXTERNALS DEFINED HERE ARE IN SYRLIB.MAC, THE LIBRARY
	;OF COMMON ROUTINES FOR ALL PARTS OF THE SYSERR PACKAGE.

	EXTERNAL HEADRD,ABORT,CHRCHK,DATECK,FILERR,TOOBIG,MBCHAR,PTSTRG
	EXTERNAL CNISU2,BADNAM,MASSVM,DEVCHK,ERRINT,SKIPIT,IDCHK
	EXTERNAL STRCHK,DETCHK,DMPENT,HDRLST,PAGXCD,DVCHAR,TMCHAR
	EXTERNAL SAYDAY,GETNBS,.OCTLE,.DECML,.ASCIE,.SIXBT,ENTRST,NOTRAN,SPACE3
	EXTERNAL .HAFWD,.SPECL,.HTIME,.PPNWW,.ODECW,.UDATE,.TASCI,.PPNWT
	EXTERNAL .TDIRW,R5VSIX,MONVER,BADADD,TAB031,TYPAST,BLDPTR
	EXTERNAL ACLST,SAVE4P,RET4P,HWDUMP,TYPBCD,LSTEB,JFLOOP,CNIDCD
	EXTERNAL XORTAB,BITLST,.DVTAB,.MXBLK,.TRBLK,.SUBLK,.SECBK
	EXTERNAL WDCNT,COMPAR,SKPRTN,TYPNBS,TITLST,SKIPWD,ADVBFF
	EXTERNAL FIXBUF,STBUFF,INPWD,GOSUM,GETWD,FFPRNT,SLPRNT,CLPRNT
	EXTERNAL TBPRNT,CHROUT,TTYSIX,MDECHR,FIXNAM,MN2VER,SBUSFN
	EXTERNAL .TVERW,T11ACI,BLKTRN,DRVTYP,COLOUT,SBDOUT


	;INTERNALS DEFINED HERE ARE FOR USE BY SYRLIB
	INTERNAL KONMSK,KLEDMP,MINERB,DEVDS2,ALLTBL
	INTERNAL NAMLT2,TYPMES,LINE,ALLLTH,NAMTB2,DUMDAY
	INTERNAL DEVTYP,ERINDX,PCSTBL,PDLPNT,BITCHK,ERRLTH
	INTERNAL ERRTBL,SUMUPD,MASLTH,NAMLTH,MDE000
	INTERNAL MASNA2,MASLT2


	.JBVER==137
	LOC	.JBVER

	BYTE	(3)VWHO(9)VSYSER(6)VMINOR(18)VEDIT
	SALL


	TWOSEG
	RELOC	400000
	;PROCSD -- STANDARD ENTRY PROCESSOR #1
	;CALL	JRST PROCSD
	;
	;RETURN	JRST ABORT	WHEN ENTRY IS PROCESSED OR ABORTED
	;OPERATION IS CONTROLLED BY ENTRY IN CONTROL TABLE
	;ROUTINE GETS AOB POINTER TO DESIRED WORD IN BUFFER
	;IF THERE IS ONE PRESENT
	;THEN DISPATCHES TO WORD PROCESSOR LEVEL
	;VIA PUSHJ	P,SUBTAB(MODE)
	;PASSES BUFFER WORD IN P2 TO WORD PROCESSOR

PROCSD:	TRNE	F,F.BRF		;/BRIEF ?  -  EDIT [724]
	 JRST	NEWCMD##	;YES! - DO IT THAT WAY
	SETZM	OFFSET		;CLEAR WORD OFFSET COUNT
	MOVE	P1,(CTINDX)	;PICKUP FIRST WORD IN CONTROL TABLE
	JUMPE	P1,ABORT	;ABORT WHEN END OF CTL TABLE SEEN
	TLNE	P1,770000	;DO WE NEED TO GET AN AOB POINTER
	PUSHJ	P,GETAOB	;YES-WORD IS IN A RELOCATABLE SUBTABLE IN ENTRY
	LDB	T2,[POINT 6,P1,11]	;PICKUP WORD LOCATION IN ENTRY
	ADD	T2,OFFSET	;OFFSET CONTAINS AOB BLOCK STARTING LOCATION
	CAML	T2,ENTRWC	;DONT TRY EDIT 153 TO ACCESS WORDS OUTSIDE OF ENTRY
	AOJA	CTINDX,PROCSD	;GET NEXT WORD IN CTL TABLE
	CAILE	T2,WKSIZE	;MAKE SURE THE WORD ASKED FOR IS IN WORK BUFFER
	AOJA	CTINDX,PROCSD	;IGNORE AND GET NEXT WORD
	MOVE	P2,WKBUFF(T2)	;PICKUP DATA WORD IN WORK BUFF
	LDB	T3,[POINT 6,P1,17]	;PICKUP WORD PROCESSES MODE
	CAIG	T3,SUBMAX	;IS IT AND UNKNOWN MODE
	PUSHJ	P,SUBTAB(T3)	;ITS RECOGINIZED
	AOJA	CTINDX,PROCSD	;EITHER NOT KNOWN OR FALL HERE

GETAOB:	LDB	T2,[POINT 6,P1,5]	;PICKUP AOBJN POINTER ADDRESS IN ENTRY
					;AOB GIVEN IS WITH REF TO HEADER
	SKIPL	T2,WKBUFF(T2)	;PICKUP THE ACTUAL POINTER AND SKIP IF LEGAL
	JRST	AOBQIT		;AOBJN POINTER = 0 CLEAN UP PDL AND GO TO PROCSD
;[763]		SUB	T2,HEADWC	;CORRECT AOB POINTER FOR HEADER SIZE
	HRRZM	T2,OFFSET	;SAVE IT IN OFFSET
	MOVEM	T2,AOBPNT	;SAVE POINTER FOR SPECL ROUTINE USAGE
	POPJ	P,		;VAMOOSE



	;HERE WHEN AOBJN POINTER = POS IN LH
	;NORMALLY SHOULD NOT HAPPEN

AOBQIT:	POP	P,T2		;DUMMY POP TO FIX PDP
	AOJA	CTINDX,PROCSD	;BUMP CTINDX AND BACK TO START
	SUBTTL	DIALOG RELATED SUBROUTINES
	;HERE IS THE DUMMY PROCSA FOR THIS HIGH SEG
	;IT SAVES THE AC'S AND THEN CALLS OVRLAY FOR REPLACEMENT
	;WITH SYSERA.HGH

PROCSA:	MOVE	T1,[SIXBIT/SYSERA/]
	MOVEM	T1,OVRBLK+1	;INTO THE SPEC AREA
	SETZ	15,
	MOVEM	17,SAVEAC+17
	MOVEI	17,SAVEAC
	BLT	17,SAVEAC+16	;TUCK AWAY OUR AC'S
	JRST	OVRLAY		;NOW PLEASE OVERLAY US WITH PROCSA


	;HERE IS THE DUMMY PROCSB FOR THIS HIGH SEG
	;IT SAVES THE AC'S AND THEN CALLS OVRLAY FOR REPLACEMENT
	;WITH SYSERB.HGH

PROCSB:	MOVE	T1,[SIXBIT/SYSERB/]
	MOVEM	T1,OVRBLK+1	;INTO THE SPEC AREA
	SETZ	15,
	MOVEM	17,SAVEAC+17
	MOVEI	17,SAVEAC
	BLT	17,SAVEAC+16	;TUCK AWAY OUR AC'S
	JRST	OVRLAY		;NOW PLEASE OVERLAY US WITH PROCSB


	;HERE IS THE DUMMY PROCSC FOR THIS HIGH SEG
	;IT SAVES THE AC'S AND THEN CALLS OVRLAY FOR REPLACEMENT
	;WITH SYSERC.HGH

PROCSC:	MOVE	T1,[SIXBIT/SYSERC/]
	MOVEM	T1,OVRBLK+1	;INTO THE SPEC AREA
	SETZ	15,
	MOVEM	17,SAVEAC+17
	MOVEI	17,SAVEAC
	BLT	17,SAVEAC+16	;TUCK AWAY OUR AC'S
	JRST	OVRLAY		;NOW PLEASE OVERLAY US WITH PROCSC


	;HERE IS THE DUMMY PROCSN FOR THIS HIGH SEG
	;IT SAVES THE AC'S AND THEN CALLS OVRLAY FOR REPLACEMENT
	;WITH SYSERN.HGH

PROCSN:	MOVE	T1,[SIXBIT/SYSERN/]
	MOVEM	T1,OVRBLK+1	;INTO THE SPEC AREA
	SETZ	15,
	MOVEM	17,SAVEAC+17
	MOVEI	17,SAVEAC
	BLT	17,SAVEAC+16	;TUCK AWAY OUR AC'S
	JRST	OVRLAY		;NOW PLEASE OVERLAY US WITH PROCSN
	;STARTD-- ROUTINE TO START AT WHEN OVERLAYED
	;TO CORRECTLY PROCESS CURRENT ENTRY.

STARTD:	MOVEI	T1,CHROUT	;OUR TYPO ROUTINE
	PUSHJ	P,.TYOCH##	;INIT SCAN
	MOVE	T1,ERTYPE	;CURRENT TYPE
	PUSHJ	P,ERRINT	;GET OUR INDEX VALUE
	MOVE	T1,ERTYPE	;CORRECT INDEX TO ENTCHR TABLE
	MOVE	T2,ENTCHR(T1)	;PICKUP ENTRY CHAR WORD
	TRNN	F,F.ENT		;/ENTRY ?  [752]
	TRNE	F,F.SEQ		;[532]SAID /SEQ?
	 JRST	START1		;YES,FORCE LISTING
	TLZ	F,F.BTCK	;CLEAR EXAMINE ENTRY FLAG
	TLNN	T2,E.LALL!E.LNXM!E.LPAR!E.LPER!E.LSUM	;ANY LISTING DESIRED
	JRST	SKIPIT		;SKIP THIS ENTRY
	TLNE	T2,E.LNXM!E.LPAR!E.LPER!E.LSUM	;ANY REASON TO DO BIT CHECKING?
	TLO	F,F.BTCK	;YES-SET FLAG TO DO IT LATER
START1:	MOVE	T3,ERTYPE	;GET CORRECT INDEX
	AOS	ENTCHR(T3)	;NO- BUMP COUNTER
	SETZ	WKINDX,		;CLEAR INDEX INTO BUFFER
	SKIPG	T1,ENTRWC	;PICKUP ENTRY LENGTH AND CHECK FOR LEGALITY
	JRST	ENTRST		;OPP, TRY TO RESYNC
	MOVE	P4,ERRIND
	TLNE	F,F.BTCK	;ANY TO DO?
	PUSHJ	P,@BITCHK(P4)	;GO DO IT
	TRNE	F,F.REM		;[417]/REMOTE?
	 JRST	REMDAT##	;YES-DO IMAGE BINARY DUMP
	PUSHJ	P,HDRLST
	MOVE	T2,ALLIND
	HRRZ	T1,PCSTBL(T2)
	HLRZ	CTINDX,PCSTBL(T2)	;CONTROL TABLE ADDRESS
	JRST	(T1)
	SUBTTL	WORD LEVEL SUBROUTINES
	;SUBTAB -- SUBROUTINES TO OUTPUT ENTRY WORD IN DESIRED FORMAT
	;SETUP  P1=ADDRESS OF TEXT TO BE OUTPUT AS DESCRIPTOR
	;	FOR THIS DATA WORD.
	;	P2= WORD TO BE OUTPUT.
	;CALL	PUSHJ	P,SUBTAB(MODE)
	;
	;RETURN	CALL+1
	;DISPATCHES TO APPROPIATE ROUTINE INTERNALLY TO DO WORD CONVERSION AND OUTPUT
SUBTAB:	SINDEX	<OCTLE>
	SINDEX	<DECML>
	SINDEX	<ASCIE>
	SINDEX	<SIXBT>
	SINDEX	<HAFWD>
	SINDEX	<SPECL>
	SINDEX	<HTIME>
	SINDEX	<PPNWW>
	SINDEX	<UDATE>
	SINDEX	<TASCI>
	SINDEX	<PPNWT>

	;SPECIAL LISTING ROUTINES START HERE.


PT%001:	TYPEIT	<
STATUS AT ERROR:
	BAD DATA DETECTED BY:	>	;EDIT [737]
	LDB	T2,[POINT 5,P2,5]	;GET PAGE FAIL CODE
	CAIN	T2,25			;PAGE TABLE?
	 MOVEI	T1,[ASCIZ/PAGE TABLE/]
	CAIN	T2,36			;AR/
	 MOVEI	T1,[ASCIZ/AR/]
	CAIN	T2,37			;ARX?
	 MOVEI	T1,[ASCIZ/ARX/]
	PUSHJ	P,.TSTRG
	TYPEIT	<
	PAGE FAIL WD AT TRAP:	>
	MOVE	T1,P2			;SHOULD STILL BE THERE
	PUSHJ	P,.TXWDW
	TYPEIT	<
	BAD DATA WORD:	>
	MOVE	P1,WKBUFF+PT%BDW	;GET IT
	MOVE	T1,P1
	PUSHJ	P,.TXWDW
	TYPEIT	<
	GOOD DATA WORD:	>
	MOVE	P2,WKBUFF+PT%GDW	;GOOD CONTENTS,MAYBE
	MOVE	T1,P2
	PUSHJ	P,.TXWDW
	XOR	P1,P2			;CREATE DIFFERENCE
	TYPEIT	<
	DIFFERENCE:	>
	MOVE	T1,P1
	PUSHJ	P,.TXWDW
	TYPEIT	<
	PHYSICAL MEM ADDR.
	 AT FAILURE:	>
	MOVE	T1,WKBUFF+PT%PMA
	PUSHJ	P,.TXWDW
	TYPEIT	<
	RECOVERY:	>
	MOVE	P1,WKBUFF+PT%TRY	;RETRY WORD
	MOVE	T1,[SIXBIT/CONT./]	;ASSUME GOODNESS
	TLNE	P1,ERRHRD		;BETTER CHECK
	 MOVE	T1,[SIXBIT/CRASH/]
	PUSHJ	P,.TSIXN

	TYPEIT	< USER
	RETRY COUNT:	>
	HRRZ	T1,P1
	PUSHJ	P,.ODECW
	TLNE	P1,1B20
	 PUSHJ	P,[TYPEIT	(
	CACHE ERROR,)
		POPJ	P,0]
	TLNE	P1,1B21
	 PUSHJ	P,[TYPEIT	(
	CACHE IN USE,)
		POPJ	P,0]
	TLNE	P1,1B22
	 PUSHJ	P,[TYPEIT	(
	ERROR ON SWEEP TO CORE,)
		POPJ	P,0]
	POPJ	P,0	;BACK TO PROCSD



	;SPECIAL ROUTINES FORTOPS20 RELOAD AND BUGHLT/BUGCHK
	;ARE HERE


RL%001:	TYPEIT	<
RELOAD BREAKDOWN:
>
	SKIPN	P2		;WAS IT BUGHLT?
	 JRST	RL%002		;NO
	TYPEIT	<	BUGHLT ADDRESS:	>
	MOVE	T1,P2		;GET THE ADDR
	PUSHJ	P,.TOCTW
RL%002:	SKIPN	P1,WKBUFF+RL%OPR	;OFFSET FROM WKBUFF
	 POPJ	P,0		;NONE THERE
	TYPEIT	<	WHY RELOAD:	>
	HRRZI	T1,WKBUFF(P1)	;ADDR OF ASCIZ
	PJRST	.TSTRG		;TO OPR COMMENTS


	;HERE FOR 102

BG%001:	TYPEIT	<
	ERROR:		>
	MOVE	T1,[SIXBIT/BUGCHK/]
	CAIN	P2,BG%INF		;BUGINF?
	 MOVE	T1,[SIXBIT/BUGINF/]
	CAIN	P2,BG%HLT		;BUGHLT?
	 MOVE	T1,[SIXBIT/BUGHLT/]	;EDIT 213
	PUSHJ	P,.TSIXN	;SAY EITHER
	PUSHJ	P,.TCRLF
	
	TYPEIT	<	ADDRESS OF ERROR:	>
	MOVE	T1,WKBUFF+BG%ADR
	PUSHJ	P,.TOCTW	;IN OCTAL
	TYPEIT	<
	NAME:			>
	MOVE	T1,WKBUFF+BG%NAM		;GET NAME
	PUSHJ	P,.TSIXN
	PUSHJ	P,.TCRLF
	TYPEIT	<	DESCRIPTION:		>
	HRRZ	T1,WKBUFF+BG%MSG
	ADDI	T1,WKBUFF	;ANOTHER ASCIZ POINTER
	PUSHJ	P,.TSTRG
	PUSH	P,P1
	SETZ	P1,
	PUSHJ	P,DETCHK	;SAID /DETAIL?
	POP	P,P1
	;START [711-RLD]
	TYPEIT	<
	CONI APR:	>
	MOVE	T1,WKBUFF+BG%APS	;GET THE VALUE
	PUSHJ	P,.TXWDW		;IN HALF WORD
	TYPEIT	< = >
	MOVE	P1,WKBUFF+BG%APS
	MOVEI	T1,12			;OFFSET FOR KL10 APR
	SKIPE	KSMON			;KS10 ENTRY ?
	MOVEI	T1,15			;YES! - CHANGE TO KS10 APR OFFSET
	MOVEM	T1,KONTYP		;[722]FINISH THE SETUP
	PUSHJ	P,CNIDCD		;DO TRANSLATION
	TYPEIT	<
	CONI PAG:	>
	MOVE	T1,WKBUFF+BG%PGS
	PUSHJ	P,.TXWDW
	TYPEIT	<
	DATAI PAG:	>
	MOVE	T1,WKBUFF+BG%PGD
	PUSHJ	P,.TXWDW
	;END [711-RLD]
	TYPEIT	<
	CONTENTS OF AC'S:>	;YES
	MOVEI	P1,BG%ACS	;OFFSET OF 1ST
	HRLI	P1,-20		;# TO DUMP
	PUSHJ	P,ACLST
	TYPEIT	<
	PI STATUS:	>
	MOVE	T1,WKBUFF+BG%PIS	;GET THE WORD
	PUSHJ	P,.TXWDW		;IN HALF WORD
	MOVE	P1,WKBUFF+BG%RCT	;# OF REGISTERS
	SKIPN	P1			;BUT IF NONE
	 POPJ	P,0			;LEAVE NOW  [763]
	TYPEIT	<
	ADDITIONAL DATA ITEMS:	>
	MOVE	T1,P1
	PUSHJ	P,.TOCTW
	MOVNS	P1,P1			;MAKE NEGATIVE
	HRLZ	P2,P1			;# TO DUMP  [526]
	HRRI	P2,WKBUFF+BG%REG
	PUSHJ	P,.TCRLF
	PUSHJ	P,.TTABC
	MOVE	T1,0(P2)		;SOMETHING TO DUMP
	PUSHJ	P,.TXWDW
	PUSHJ	P,.TCRLF
	AOBJN	P2,.-4			;GO BACK IF MORE TO DO
	POPJ	P,0
MP%001:					; [614]
PI%001:	TYPEIT	<
	CONI APR:	>
	MOVE	P1,WKBUFF+PI%CNI	;GET THE APR CONI
	MOVE	T1,P1
	PUSHJ	P,.TXWDW
	TYPEIT	< = >
	MOVEI	T1,12			;OFFSET FOR CONI APR KL10
	SKIPE	KSMON			;KS10 ENTRY ?
	MOVEI	T1,15			;YES! - CHANGE TO KS10 APR OFFSET
	MOVEM	T1,KONTYP
	PJRST	CNIDCD			;GO TRANSLATE  [763]

BG%002:				;  [763]
MP%01A:				;NOW FOR ERA  [763]
PI%01A:	SKIPE	KSMON			;KS10 ENTRY ?  [763]
	 POPJ	P,0			;YES! - LEAVE NOW
	TYPEIT	<
	ERA:		>
	MOVE	T1,P2
	PUSHJ	P,.TXWDW
	TYPEIT	< = WD #>
	LDB	T1,[POINT 2,P2,1]	;GET WORD #
	PUSHJ	P,.TOCTW
	PUSHJ	P,.TSPAC
	TLNE	P2,1B20			;SWEEP?
	 PUSHJ	P,[TYPEIT	<, SWEEP REF, >
		POPJ	P,0]
	TLNE	P2,1B21			;CHAN?
	PUSHJ	P,[TYPEIT <, CHAN REF, >
		POPJ	P,0]
	LDB	T2,[POINT 3,P2,6]	;GET DATA SOURCE & WRITE BIT
	MOVE	T1,ERAMES(T2)		;ADDR OF SOME ASCIZ
	PUSHJ	P,.TSTRG

;NOW FOR MEM ADDR  [763]
	TYPEIT	<
	BASE PHY. MEM ADDR.
	 AT FAILURE:	>
	LDB	T1,[POINT 22,P2,35]	;22 BITS OF ADDR 
	PUSHJ	P,.TOCTW		;NOT HALF WORD
	PJRST	.TCRLF			;  [763]

ERAMES:	[ASCIZ/MEMORY READ/]
	[ASCIZ/CHAN STORE STATUS/]
	[ASCIZ/INVALID/]
	[ASCIZ/CHAN DATA/]
	[ASCIZ/INVALID/]
	[ASCIZ/E-BOX STORE/]
	[ASCIZ/CACHE READ/]
	[ASCIZ/CACHE WRITE/]
	;SET UP POINTERS FOR 162 ENTRY  [614]
MP%002:	HRRZI	P1,WKBUFF+MP%ADD	;POINTER TO BAD ADDRESSES
	HRRZI	P2,WKBUFF+MP%DAT	;POINTER TO BAD DATA WORDS
	HRRZI	P3,WKBUFF+MP%CDA	;POINTER TO GOOD DATA WORDS
	JRST	MP%02A			;NOW USE EXISTING CODE FOR 161

	;P2 HAS PI%DAT
PI%002:	HRRZI	P1,WKBUFF+PI%ADD	;POINTER TO BAD ADDRESSES
	HRRZI	P2,WKBUFF+PI%DAT	;POINTER TO BAD DATA WORDS
	HRRZI	P3,WKBUFF+PI%CDA	;POINTER TO GOOD DATA WORDS  [420]
MP%02A:	HRLI	P1,-^D10
	HRLI	P2,-^D10		;# OF WORDS TO DUMP
	HRLI	P3,-^D10
	TYPEIT	<
ERRORS DETECTED DURING SWEEP:
ADDRESS	BAD DATA	GOOD DATA	DIFFERENCE
>

PI%003:	MOVE	T1,0(P1)	;GET ADDRESS
	SKIPN	T1			;ANYTHING THERE?
	 JRST	PI%004			;NO
	TLZE	T1,1B18		;[717] IS GOOD DATA VALID?
	 SETOM	P4		;[717]NO,SET FLAG
	PUSHJ	P,.TOCTW	;NOT HAFWD
	PUSHJ	P,.TTABC
	MOVE	T1,0(P2)	;GET DATA
	PUSHJ	P,.TXWDW
	PUSHJ	P,.TTABC	;[420]LIST GOOD DATA AND XOR DIFFERENCE
	SKIPE	P4		;[717]FLAG SET?
	 JRST	PI%006		;[717]YES, SAY NO GOOD DATA
	MOVE	T1,0(P3)	;GET GOOD DATA
	PUSHJ	P,.TXWDW
	PUSHJ	P,.TTABC
	MOVE	T1,0(P2)	;BAD
	MOVE	T2,0(P3)	;GOOD
	XOR	T1,T2		;DIFFERENCE TO T1
	PUSHJ	P,.TXWDW	;LIST IT
				;END [420]
	PUSHJ	P,.TCRLF
PI%004:	AOBJN	P1,.+1
	AOBJN	P3,.+1
	AOBJN	P2,PI%003	;GO DO NEXT OR
	 PUSHJ	P,TITLST	;START ON NEXT PAGE AND
	  POPJ	P,0		;LEAVE



PI%005:	HRLZI	P2,-^D8		;BUILD A POINTER
	HRRI	P2,WKBUFF+PI%SBD	;FOR SBDLST AND THEN
	JRST	SBDLST			;CALL THE RIGHT ROUTINE

;[717]
PI%006:	MOVEI	T1,[ASCIZ/GOOD DATA NOT FOUND
/]
	PUSHJ	P,.TSTRG	;SAY THAT
	SETZ	P4,		;CLEAR THE FLAG
	JRST	PI%004		;GET NEXT WORDS
	;[717] END

	;HERE WE LIST SYSTEM ME CONFIG BASED ON RESULTS OF
	;SBUS DIAG FUNCTIONS STORED IN WKBUFF
	;FIRST IS INTERLEAVE MODE
	;POINTER TO SUBTABLE IS IN P2
SBDLST:	PUSH	P,P1
	SETZ	P1,
	PUSHJ	P,DETCHK	;SAID /DETAIL?
	POP	P,P1
	TYPEIT	<
SYSTEM MEMORY CONFIGURATION:
>
	MOVE	P1,P2
;	SKIPN	P2,0(P1)	;DMA PRESENT?
	 JRST	SBDLS1		;NO
	TYPEIT	<
	INTERLEAVE MODE:	>
	LDB	T2,[POINT 2,P2,7]	;GET INTERLEAVE MODE
	MOVE	T1,[SIXBIT/4 WAY/]	;ASSUME THE BEST
	CAIN	T2,2
	 MOVE	T1,[SIXBIT/2 WAY/]
	CAIN	T2,1
	 MOVE	T1,[SIXBIT/NONE/]	;WE TRIED
	PUSHJ	P,.TSIXN
	TYPEIT	<
	DMA:
	LAST ADDR HELD:	>
	LDB	T1,[POINT 22,P2,35]	;A FEW ADDR BITS
	PUSHJ	P,.TOCTW
	TYPEIT	<
	ERRORS DETECTED:	>
	MOVE	P2,0(P1)
	LDB	P3,[POINT 6,P2,5]	;6 ERROR BITS
	SKIPN	P3			;ANY SET?
	 PUSHJ	P,[TYPEIT (NONE)
		POPJ	P,0]
	TRNE	P3,1B32			;NXM?
	 PUSHJ	P,[TYPEIT (INC. CYCLE)	;[435]
		POPJ	P,0]
	TRNE	P3,1B33			;READ PARITY
	 PUSHJ	P,[TYPEIT (READ PARITY)
		POPJ	P,0]
	TRNE	P3,1B34
	 PUSHJ	P,[TYPEIT (WRITE PARITY)
		POPJ	P,0]
	TRNE	P3,1B35
	 PUSHJ	P,[TYPEIT (ADDR PARITY)
		POPJ	P,0]
SBDLS1:;	AOBJN	P1,.+1	;UPDATE POINTER
;	AOBJN	P1,.+1
	SETZ	P3,

SBDLS2:	SKIPN	P2,1(P1)	;GET FUNCTION 1
	 JRST	SBDLS3		;SETUP FOR NEXT
	TYPEIT	<
CONTROLLER:  >
	MOVE	T1,SBDNAM(P3)	;CONTROLLER #
	PUSHJ	P,.TSIXN
	PUSHJ	P,.TSPAC
	PUSHJ	P,.TSPAC
	LDB	T2,[POINT 4,P2,11]	;GET TYPE
	PUSH	P,T2		;SAVE IT
	MOVE	T1,SBDTYP(T2)
	PUSHJ	P,.TSIXN
	PUSHJ	P,.TSPAC
	PUSHJ	P,.TSPAC
	POP	P,T3	;GET MEMORY TYPE BACK
	LDB	T2,[POINT 4,P2,7]	;# OF MODULES
	SETZ	T1,
	TRNE	T2,1B35		;SM0 PRESENT?
	 ADDI	T1,1
	TRNE	T2,1B34		;SM1?
	 ADDI	T1,1
	TRNE	T2,1B33		;SM2?
	 ADDI	T1,1
	TRNE	T2,1B32		;SM3?
	 ADDI	T1,1
	MUL	T1,SBDSIZ(T3)	;TIMES UNIT SIZE
	MOVE	T1,T2			;ANSWER TO T1
	PUSHJ	P,.TDECW
	TYPEIT	< K>
	TYPEIT	<
F0:	>
	MOVE	T1,0(P1)	;GET FUNCTION 0
	PUSHJ	P,.TXWDW
	TYPEIT	<	F1:	>
	MOVE	T1,1(P1)	;GET FUNCTOON 1
	PUSHJ	P,.TXWDW
	TYPEIT	<
	INTERLEAVE MODE:	>
	MOVE	T2,0(P1)	;GETFINCTION0
	LDB	T3,[POINT 2,T2,7]
	MOVE	T1,SBDINT(T3)	;POINTER TO ASCIZ OF INT. MODE
	PUSHJ	P,.TSTRG
	TYPEIT	<
	REQ ENABLED:	>
	MOVE	P2,1(P1)		;GET FUNCTION 1
	TRNN	P2,1B32		;0?
	JRST	.+3
	TYPEIT	<0 >
	TRNN	P2,1B33
	JRST	.+3
	TYPEIT	<1 >
	TRNN	P2,1B34
	JRST	.+3
	TYPEIT	<2 >
	TRNN	P2,1B35
	JRST	.+3
	TYPEIT	(3)
	TYPEIT	<
	LOWER ADDRESS BOUNDARY:	>
	MOVE	P2,1(P1)	;GET FUNCTION 1
	LDB	T1,[POINT 8,P2,21]	;GETS ADDRESS BITDS
	LSH	T1,^D14		;MOVED OVER TO CONVERT TO BETTER FORMAT
	PUSHJ	P,.TOCTW
	TYPEIT	<
	UPPER ADDRESS BOUNDARY:	>
	LDB	T1,[POINT 4,P2,25]	;GETS 18-21
	LSH	T1,^D14		;MOVED TO CORRECT PLACE
	LDB	T2,[POINT 4,P2,17]	;GET 14-17
	HRL	T1,T2	;SETSUP 14-21 FOR UPPER ADDR
	TRO	T1,37777	;SET THE OTHER BITS
	PUSHJ	P,.TOCTW
	TYPEIT	<
	ERRORS DETECTED:	>
	MOVE	P2,0(P1)
	LDB	P4,[POINT 6,P2,5]	;6 ERROR BITS
	SKIPN	P4			;ANY SET?
	 PUSHJ	P,[TYPEIT (NONE)
		POPJ	P,0]
	TRNE	P4,1B32			;INC CYCLE?
	 PUSHJ	P,[TYPEIT (INC CYCLE)
		POPJ	P,0]
	TRNE	P4,1B33			;READ PARITY
	 PUSHJ	P,[TYPEIT (READ PARITY)
		POPJ	P,0]
	TRNE	P4,1B34
	 PUSHJ	P,[TYPEIT (WRITE PARITY)
		POPJ	P,0]
	TRNE	P4,1B35
	 PUSHJ	P,[TYPEIT (ADDR PARITY)
		POPJ	P,0]
SBDLS3:	AOJ	P3,
	AOBJN	P1,.+1		;UPDATE POINTER TWICE
	AOBJN	P1,SBDLS2	;DO NEXT CONTROLLER YX
	 POPJ		P,0	;ALL DONE

SBDNAM:	SIXBIT/#0/
	SIXBIT/#1/
	SIXBIT/#2/
	SIXBIT/#3/

SBDTYP:	SIXBIT/CUST/
	SIXBIT/MA20/
	SIXBIT/DMA20/
	SIXBIT/MB20/
	SIXBIT/UNKN/

SBDSIZ:	0
	^D16
	0
	^D32

	0

SBDINT:	[ASCIZ/OFF-LINE/]
	[ASCIZ/NONE/]
	[ASCIZ/2-WAY/]
	[ASCIZ/4-WAY/]
	;SPECIAL ROUTINES TO SUPPORT BRIEF ENTRY  [730]

FE%DEV:	MOVE	T1,FE$NAM(T1)	;GET DEVICE NAME IN SIXBIT
	PJRST	.TSIXN		; OUTPUT IT & RETURN

	;HERE FOR FRONT END DEVICE REPORTING
	;P2 HAS FE%COD

FE%001:	TYPEIT	<
	DEVICE:	>
	HRRZ	T1,P2		;GET DEV TYPE ALONE
	CAIG	T1,0		;LEGAL TYPE?		START EDIT [514]
	 JRST	FE$UNK		;NO! - UNKNOWN
	CAIG	T1,11		;HARDWARE DEVICE?
	 JRST	FE%HRD		;YES!
	CAIGE	T1,200		;LEGAL PSEUDO TYPE?
	 JRST	FE$UNK		;NO! - UNKNOWN
	CAILE	T1,211		;OVER RANGE?
	 JRST	FE$UNK		;YES! - UNKNOWN
	 JRST	FE%004		;NOPE

FE%HRD:	MOVE	T1,FE$NAM(P2)	;GET DEVICE NAME	END EDIT [514]
	PUSHJ	P,.TSIXN	;IN SIXBIT
	TYPEIT	<  # >
	HLRZ	T1,P2			;GET DEV #
	TRZ	T1,1B18			;CLR THE I DON'T KNOW BIT
	PUSHJ	P,.TOCTW		;OUTPUT #  [730]
	PUSHJ	P,.TCRLF
	TLNN	P2,1B18			;"I DON'T KNOW"?
	 JRST	FE%002			;NO
	TYPEIT	< **DEVICE UNKNOWN TO TOPS**
>

	;NOW GO TO DEVICE DEPENDENT ROUTINES WITH POINTERIN P1

FE%002:	HRRZ	P1,WKBUFF+FE%OFF
	PUSHJ	P,@FE%003(P2)
	POPJ	P,0
FE$NAM:	0
	SIXBIT/CTY/
	SIXBIT/DL11C/
	SIXBIT/DH11/
	SIXBIT/DLSCAN/
	SIXBIT/LP20/
	SIXBIT/CD20/
	SIXBIT/CLOCK/
	SIXBIT/FE DEV/
	SIXBIT/UNK/

FEHNAM:	SIXBIT/KLCPU/		;200
	SIXBIT/KLERR/		;201
	SIXBIT/UNK/		;202
	SIXBIT/UNK/		;203
	SIXBIT/UNK/		;204
	SIXBIT/UNK/		;205			START EDIT [514]
	SIXBIT/UNK/		;206
	SIXBIT/UNK/		;207
	SIXBIT/KLINIK/		;210
	SIXBIT/UNK/		;211			END EDIT [514]

FE%005:	0,,FE$KLS		;KL RELOAD REPORT FROM FRONT END
	0,,FE$KLF		;KLERROR FILE DUMP
	0,,FE$UNK		;202
	0,,FE$UNK		;203
	0,,FE$UNK		;204
	0,,FE$UNK		;205			START EDIT [514]
	0,,FE$UNK		;206
	0,,FE$UNK		;207
	0,,FE%KLI		;KLINIK EVENT - SHOULD NEVER COME HERE
	0,,FE$UNK		;211			END EDIT [514]


FE%003:	0,,FE$UNK
	0,,FE$UNK
	0,,FE$UNK
	0,,FE$DH1
	0,,FE$UNK
	0,,FE$LP0	;LP20 ROUTINE
	0,,FE$CD0	;CD20 ROUTINE
	0,,FE$UNK
	0,,FE$UNK
	0,,FE$UNK
FE$UNK:	TYPEIT	< - DEVICE IS UNKNOWN TO SYSERR
>
	TYPEIT	<
	DEVICE CODE:	>
	HRRZ	T1,WKBUFF+FE%COD	;GET DEV CODE	
	PUSHJ	P,.TOCTW		;IN OCTAL
UN$KLI:	TYPEIT	<
	DATA IN ERROR BLOCK IN 8 BIT:
>
	MOVE	P2,WKBUFF+FE%OFF	;GET OFFSET
	ADDI	P2,WKBUFF		;CORRECT IT
FE$UN1:	PUSHJ	P,.TTABC
	MOVE	T1,0(P2)		;GET VALUE
	PUSHJ	P,BYTE.8##		;IN 8 BIT FORMAT
	PUSHJ	P,.TCRLF
	AOBJN	P2,FE$UN1		;MORE TO DO
	 POPJ	P,0

FE%004:	SUBI	T1,200		;REMOVE OFFSET
	MOVE	P3,T1		;SAVE IT
	MOVE	T1,FEHNAM(P3)	;GET A NAME
	PUSHJ	P,.TSIXN
	HRRZ	P1,WKBUFF+FE%OFF	;SETUP OFFSET
	PUSHJ	P,@FE%005(P3)	;GO TO DEVICE ROUTINES
	POPJ	P,0		;THEN BACK TO PROCSD


	;ROUTINE TO UNPACK 3 WORDS FROM KLEFIL INTO ONE
	;PDP-10 WORD IN T1.  P1 HOLDS POINTER TO 1ST
	;WORD AND IS UPDATED IN THIS ROUTINE.
FE$BWD:	MOVE	T2,KLEFIL(P1)	;GET 1ST PORTION
	DPB	T2,[POINT 16,T1,35]
	ADDI	P1,1		;UPDATE
	MOVE	T2,KLEFIL(P1)	;GET 2ND
	DPB	T2,[POINT 16,T1,19]
	ADDI	P1,1		;UPDATE AGAIN
	MOVE	T2,KLEFIL(P1)	;GET 3RD
	DPB	T2,[POINT 4,T1,3]	;LAST BITS
	POPJ	P,0		;WORD IN T1 SO RETURN

FE$LP0:	TYPEIT	<
	STD. STATUS:	>
	MOVE	P1,WKBUFF+FE%OFF	;GET FUL OFFSETWORD
	ADDI	P1,WKBUFF		;CORRECT TO POINT INTO WKBUFF
	LDB	T1,[POINT 16,(P1),15]	;GET DV.XXX
	PUSH	P,P1			;SAVE A POINTER
	PUSH	P,T1			;SAVE THE WORD
	PUSHJ	P,.TOCTW
	MOVEI	T1,36			;CORRECTOFFSET
	MOVEM	T1,KONTYP
	TYPEIT	< = >
	POP	P,P1			;GET THE WORD BACK
	PUSHJ	P,CNIDCD		;1 FOR ONE XLATION

	;NOW FOR 2ND STATUS BYTE
	TYPEIT	<
	LP20 GEN STATUS:	>
	POP	P,P1			;GET POINTER BACK
	PUSH	P,P1	;SAVE IT STILL
	LDB	T1,[POINT 16,(P1),31]	;GET DD.LP20
	PUSH	P,T1		;SAVEIT
	PUSHJ	P,.TOCTW
	POP	P,P1			;GET IT BACK
	MOVEI	T1,37			;OFFSET
	MOVEM	T1,KONTYP		;SETUP
	TYPEIT	< = >
	PUSHJ	P,CNIDCD
	POP	P,P1			;GET POINTER BACK
	AOBJN	P1,.+1			;SKIP 2 11-WORDS FOR NOW
	AOBJN	P1,.+1			;POINT AT NEXT TWO
	HRLI	P1,-^D8			;# OF REGISTERS TO LIST
	HRLI	P2,LP$REG		;ADDR OF REG NAMES
	HRRI	P2,LP$CON		;ADDR OF CONTROL TABLE
	TYPEIT	<
	LP20 DEVICE REGISTERS
>
	PUSHJ	P,LSTEB			;LIST DEVICE REGISTERS
	PUSHJ	P,TITLST		;START ON NEXT PAGE
	POPJ	P,0

	;TABLES FOR LP20 LISTINGS
LP$REG:	SIXBIT/LPCSRA/
	SIXBIT/LPCSRB/
	SIXBIT/LPBSAD/
	SIXBIT/LPBCTR/
	SIXBIT/LPPCTR/
	SIXBIT/LPRAMD/
	SIXBIT/LPCCTR/
	SIXBIT/LPTDAT/


LP$CON:	40,,0
	41,,0
	-1,,NOTRAN
	-1,,NOTRAN
	-1,,NOTRAN
	-1,,NOTRAN
	-1,,LPCLST
	-1,,LPDLST
;DH11 ROUTINES

FE$DH1:	TYPEIT	<
	STD. STATUS:	>
	MOVE	P1,WKBUFF+FE%OFF	;GET FUL OFFSETWORD
	ADDI	P1,WKBUFF		;CORRECT TO POINT INTO WKBUFF
	LDB	T1,[POINT 16,(P1),15]	;GET DV.XXX
	PUSH	P,P1			;SAVE A POINTER
	PUSH	P,T1			;SAVE THE WORD
	PUSHJ	P,.TOCTW
	MOVEI	T1,36			;CORRECTOFFSET
	MOVEM	T1,KONTYP
	TYPEIT	< = >
	POP	P,P1			;GET THE WORD BACK
	PUSH	P,P1			;AND SAVE IT STILL
	PUSHJ	P,CNIDCD		;1 FOR ONE XLATION
	POP	P,P2			;GET THE WORD BACK
	POP	P,P1			;AND THE POINTER
	TRNN	P2,1B25			;LOST INTERRUPT?
	 JRST FE$DHA			;NO! - MUST BE HUNG DEVICE  (1B26)
	TYPEIT	<
	PAGE ADDR OF DH WHICH FAILED:	>
	LDB	T1,[POINT 16,(P1),31]	;GET NEXT WORD
	PUSHJ	P,.TOCTW		;DUMP IN OCTAL
	POPJ	P,0			;THAT'S ALL TO LIST
FE$DHA:	TYPEIT	<
	CONTENTS OF COUNTERS:	>
	LDB	T1,[POINT 16,(P1),31]	;GET ONE
	PUSHJ	P,.TOCTW		;LIST IT
	PUSHJ	P,.TCRLF
	PUSHJ	P,.TTABC
	LDB	T1,[POINT 16,1(P1),15]	;2ND
	PUSHJ	P,.TOCTW
	PUSHJ	P,.TCRLF
	PUSHJ	P,.TTABC
	LDB	T1,[POINT 16,1(P1),31]	;3RD
	PUSHJ	P,.TOCTW
	PUSHJ	P,.TCRLF
	PUSHJ	P,.TTABC
	LDB	T1,[POINT 16,2(P1),15]	;4TH
	PUSHJ	P,.TOCTW
	PUSHJ	P,.TCRLF
	PUSHJ	P,.TTABC
	POPJ	P,0			;THAT'S ALL TO LIST

FE$CD0:	TYPEIT	<
	STD. STATUS:	>
	MOVE	P1,WKBUFF+FE%OFF	;GET FUL OFFSETWORD
	ADDI	P1,WKBUFF		;CORRECT TO POINT INTO WKBUFF
	LDB	T1,[POINT 16,(P1),15]	;GET DV.XXX
	PUSH	P,P1			;SAVE A POINTER
	PUSH	P,T1			;SAVE THE WORD
	PUSHJ	P,.TOCTW
	MOVEI	T1,36			;CORRECTOFFSET
	MOVEM	T1,KONTYP
	TYPEIT	< = >
	POP	P,P1			;GET THE WORD BACK
	PUSHJ	P,CNIDCD		;1 FOR ONE XLATION

	;NOW FOR 2ND STATUS BYTE
	TYPEIT	<
	CD20 GEN STATUS:	>
	POP	P,P1			;GET POINTER BACK
	PUSH	P,P1	;SAVE IT STILL
	LDB	T1,[POINT 16,(P1),31]	;GET DD.CD11
	PUSH	P,T1		;SAVEIT
	PUSHJ	P,.TOCTW
	PUSHJ	P,.TTABC
	POP	P,P1			;GET IT BACK
	MOVEI	T1,42			;OFFSET
	MOVEM	T1,KONTYP		;SETUP
	TYPEIT	< = >
	PUSHJ	P,CNIDCD
	POP	P,P1			;GET POINTER BACK
	AOBJN	P1,.+1			;SKIP 2 BYTES FOR NOW
	TYPEIT	<
	CD20 DEVICE REGISTERS
	>
	MOVE	T1,[SIXBIT/CD11ST/]
	PUSHJ	P,.TSIXN	;INSIXBIT
	PUSHJ	P,.TTABC
	LDB	T1,[POINT 16,(P1),31]
	PUSH	P,T1			;SAVE IT
	PUSHJ	P,.TOCTW		;IN OCTAL
	MOVEI	T1,43		;OFFSET FOR THIS REG
	MOVEM	T1,KONTYP
	PUSHJ	P,.TTABC	;SOME SPACE
	POP	P,T1			;GETWORD BACK
	PUSHJ	P,SAVE4P		;SAVE AC'S
	MOVE	P1,T1		;SETUP
	TYPEIT	< = >
	PUSHJ	P,CNIDCD	;GO DECODE
	PUSHJ	P,RET4P			;RETURN THOSE AC'S
	PUSHJ	P,.TCRLF
	AOBJN	P1,.+1			;ADJUST FOR WORDS WE JUST DID
	HRLI	P1,-^D3			;# OF REGISTERS TO LIST
	HRLI	P2,CD$REG		;ADDR OF REG NAMES
	HRRI	P2,CD$CON		;ADDR OF CONTROL TABLE
	PUSHJ	P,LSTEB			;LIST DEVICE REGISTERS
	PUSHJ	P,TITLST		;START ON NEXT PAGE
	POPJ	P,0


	;TABLES FOR CD11 LISTINGS

CD$REG:	SIXBIT/CD11CC/
	SIXBIT/CD11BA/
	SIXBIT/CD11DB/


CD$CON:	-1,,NOTRAN
	-1,,NOTRAN
	-1,,NOTRAN
	;KLCPU

FE$KLS:	TYPEIT	<
	STD. STATUS:	>
	MOVE	P1,WKBUFF+FE%OFF	;GET FUL OFFSETWORD
	ADDI	P1,WKBUFF		;CORRECT TO POINT INTO WKBUFF
	LDB	T1,[POINT 16,(P1),15]	;GET DV.XXX
	PUSH	P,P1			;SAVE A POINTER
	PUSH	P,T1			;SAVE THE WORD
	PUSHJ	P,.TOCTW
	MOVEI	T1,36			;CORRECTOFFSET
	MOVEM	T1,KONTYP
	TYPEIT	< = >
	POP	P,P1			;GET THE WORD BACK
	PUSHJ	P,CNIDCD		;1 FOR ONE XLATION

	;NOW FOR 2ND STATUS BYTE
	TYPEIT	<
	KL RELOAD STATUS FROM FRONT END:  >
	POP	P,P1			;GET POINTER BACK
	PUSH	P,P1	;SAVE IT STILL
	LDB	T1,[POINT 16,(P1),31]	;GET DD.KLWD
	PUSH	P,T1		;SAVEIT
	PUSHJ	P,.TOCTW
	PUSHJ	P,.TTABC
	POP	P,P1			;GET IT BACK
	MOVEI	T1,46			;OFFSET
	MOVEM	T1,KONTYP		;SETUP
	TYPEIT	< = >
	PUSHJ	P,CNIDCD
	POP	P,P1			;GET POINTER BACK
	POPJ	P,0		;THAT'S ALL
	;SPECIAL KLINIK ROUTINES FOR BRIEF   [730]
	; OFFSET INTO TABLE IN 'T1'

	[ASCIZ /CLEAR/]			;377  (8BIT -1)
FE$KLI:	[ASCIZ /ILLEGAL EVENT TYPE!!!!/]
	[ASCIZ /SET/]			;1
	[ASCIZ /LINE RING/]		;2
	[ASCIZ /LINE DISCONNECT/]	;3
	[ASCIZ /LINE CONNECT/]		;4
	[ASCIZ /BAD PASSWORD/]		;5
	[ASCIZ /UNSUCCESSFUL LOGON/]	;6
	[ASCIZ /ACTIVE ON REBOOT/]	;7

FE.KLI:	CAIGE	T1,K.LSKL	;RANGE CHECK EVENT TYPE
	 SETZ	T1,		;BAD! - MARK IT ILLEGAL
	CAIN	T1,K.LCKL	;(8BIT -1) ?
	 SETO	T1,		;YES! - MAKE IT A 36BIT -1
	CAILE	T1,K.LRBA	;HIGH END RANGE CHECK
	 SETZ	T1,		;BAD! - MARK IT ILLEGAL
	MOVE	T1,FE$KLI(T1)	;POINT TO CORRECT STRING
	PJRST	.TSTRG		;TYPE IT & RETURN

	;CHECK FOR KLINIK EVENT

FE%KLI:	HRRZ	T1,P2		;GET TYPE ALONE (FE%COD)
	CAIE	T1,.KLINK	;IS THIS KLINIK EVENT?
	 POPJ	P,0		;NO! - OK - LEAVE
	TYPEIT	<
!!!! KLINIK EVENT:  >		;YES!

	;FIND MESSAGE TYPE

	MOVE	P1,WKBUFF+FE%OFF	;GET PACKET OFFSET
	ADDI	P1,WKBUFF		;CREATE POINTER
	LDB	T1,[K.LTYP(P1)]		;GET EVENT TYPE
	CAIN	T1,K.LCKL		;CLEAR KLINIK?
	 PJRST	K%LCKL			;YES! - LIST
	CAIL	T1,0			;NO! - GOOD MESSAGE TYPE?
	 CAILE	T1,K.LRBA		;MAYBE! - HIGH SIDE GOOD?
	  PJRST	KLI$UN			;NO! - REPORT ERROR
	LDB	T2,[K.LCOD(P1)]		;YES! - PASS EVENT CODE IN T2
	PJRST	@KLI%TY(T1)		;REPORT EVENT

KLI$UN:	TYPEIT	<BAD KLINIK MESSAGE TYPE !!!!
>
	WARN	<*BAD KLINIK MESSAGE TYPE*
>
	PUSHJ	P,UN$KLI		;OUTPUT IN OCTAL
	JRST	ABORT			;GIVE UP


	;MESSAGE TYPE DISPATCH TABLE
	; DOES NOT INCLUDE 'CLEAR KLINIK' (-1 IN 8BIT IS 377)

KLI%TY:	0,,KLI$UN			;(0) UNKNOWN
	0,,K%LSKL			;(1) SET KLINIK
	0,,K%LRNG			;(2) KLINIK LINE RING
	0,,K%LDSC			;(3) KLINIK LINE DISCONNECT
	0,,K%LCON			;(4) KLINIK LINE CONNECT
	0,,K%LBPW			;(5) KLINIK BAD PASSWORD
	0,,K%LLTO			;(6) KLINIK UNSUCCESSFUL LOGON
	0,,K%LRBA			;(7) KLINIK ACTIVE ON REBOOT
	;CLEAR KLINIK  (-1)(377)

K%LCKL:	TYPEIT	<CLEAR - WINDOW CLOSED !!!!
>
	JRST	ABORT			;THAT'S ALL

	;SET KLINIK  (1)

K%LSKL:	TYPEIT	<SET !!!!
>

	;KLINIK PARAMETERS  (-1,1)

K%LSCK:	TYPEIT	<WINDOW OPENED FROM >
	LDB	T1,[POINT 16,1(P1),15]	;GET OPEN TIME
	IMULI	T1,^D2000		;CHANGE TO MILLISEC
	PUSHJ	P,.TTIME		;OUTPUT  HH:MM:SS
	PUSHJ	P,.TSPAC		;OUTPUT SPACE
	LDB	P2,[POINT 8,1(P1),23]	;GET OPEN MONTH
	LDB	P3,[POINT 8,1(P1),31]	;GET OPEN YEAR
	LDB	T1,[POINT 8,2(P1),15]	;GET OPEN DAY
	PUSHJ	P,K.DATE		;OUTPUT  DD-MMM-YY
	TYPEIT	< TO >
	LDB	T1,[POINT 16,2(P1),31]	;GET CLOSE TIME
	IMULI	T1,^D2000		;CHANGE TO MILLISEC
	PUSHJ	P,.TTIME		;OUTPUT  HH:MM:SS
	PUSHJ	P,.TSPAC		;OUTPUT SPACE
	LDB	P2,[POINT 8,3(P1),7]	;GET CLOSE MONTH
	LDB	P3,[POINT 8,3(P1),15]	;GET CLOSE YEAR
	LDB	T1,[POINT 8,3(P1),31]	;GET CLOSE DAY
	PUSHJ	P,K.DATE		;OUTPUT  DD-MMM-YY
	TYPEIT	<
		FOR >
	LDB	T1,[POINT 8,4(P1),15]	;GET MODE
	CAIN	T1,377			;USER MODE?
	 PJRST	K%LUSR			;YES!
	LDB	T2,[POINT 8,4(P1),7]	;NO! - GET LIMIT   [605]
;TRANSLATE 11 LIMIT WORD TO AGREE WITH THOSE FOR
; MODE IN RING ACCEPTED
	IDIVI	T2,3			;1,3,7 TO 0,1,2  [605]
	ADDI	T2,1			;0,1,2 TO 1,2,3  [605]
	PJRST	K.CON			;USE ROUTINE FOR RING
;K.DATE -- KLINIK DATE ROUTINE
;OUTPUTS DATE WITH ALPHA MONTH:   "DD-MMM-YY"
;CALL:	MOVEI	T1,DAY OF MONTH  (1-31)
;	MOVEI	P2,MONTH	 (1-12)
;	MOVEI	P3,YEAR  (BASE DATE 1900)
;	PUSHJ	P,K.DATE
;USES:	T1,T2,T3,P2,P3

K.DATE:	PUSHJ	P,.TDECW		;OUTPUT DAY
	MOVE	T1,.MONTH(P2)		;GET SIXBIT MONTH
	PUSHJ	P,.TSIXN		;OUTPUT MONTH
	MOVE	T1,P3			;GET YEAR
	PUSHJ	P,.TDECW		;OUTPUT YEAR
	POPJ	P,0			;RETURN

.MONTH:	0
	SIXBIT/-JAN-/
	SIXBIT/-FEB-/
	SIXBIT/-MAR-/
	SIXBIT/-APR-/
	SIXBIT/-MAY-/
	SIXBIT/-JUN-/
	SIXBIT/-JUL-/
	SIXBIT/-AUG-/
	SIXBIT/-SEP-/
	SIXBIT/-OCT-/
	SIXBIT/-NOV-/
	SIXBIT/-DEC-/
	;KLINIK LINE RING  (2)

K%LRNG:	TYPEIT	<RING >
	CAIN	T2,1			;ACCEPTED?
	 PJRST	K%LRAC			;YES!
	CAIN	T2,377			;NO! - REJECTED? (-1)
	 PJRST	K%LRRJ			;YES!
K$LERR:	TYPEIT	<ILLEGAL MODE ERROR !!!!>	;NO! - HUH!  [605]
	JRST	ABORT			;GIVE UP

K%LRAC:	TYPEIT	<ACCEPTED !!!!>		;WINDOW OPEN  (1)
	JRST	ABORT			;THAT'S ALL
K%LRRJ:	TYPEIT	<REJECTED !!!!>		;WINDOW CLOSED  (-1)
	JRST	ABORT			;THAT'S ALL

	;KLINIK LINE DISCONNECT  (3)

K%LDSC:	TYPEIT	<DISCONNECTED >
	CAIN	T2,1			;ON PURPOSE?
	 PJRST	K%LDCM			;YES!
	CAIN	T2,377			;NO! - LINE DROP?  (-1)
	 PJRST	K%LDRP			;YES!
	PJRST	K$LERR			;NO! - HELP!

K%LDCM:	TYPEIT	<BY CTY OR TIMEOUT !!!!>
	JRST	ABORT			;THAT'S ALL
K%LDRP:	TYPEIT	<- LINE DROP DETECTED !!!!>
	JRST	ABORT			;THAT'S ALL
	;KLINIK LINE CONNECT  (4)

K%LCON:	TYPEIT	<CONNECTED IN >
K%CON:	CAIN	T2,377			;USER MODE?
	 PJRST	K%LUSR			;YES!
K.CON:	TYPEIT	<REMOTE >		;NO!
	CAILE	T2,0			;MODE IN RANGE?
	 CAILE	T2,3			;MAYBE! - HIGH SIDE GOOD?
	  PJRST	K$LERR			;NO! - BAD MODE
	PJRST	@K$LCON(T2)		;YES!

K$LCON:	0,,K$LERR			;BAD MODE
	0,,K%LROP			;(1) REMOTE OPERATOR	(1)
	0,,K%LRPR			;(2) REMOTE PROGRAMMER	(3)
	0,,K%LRMN			;(3) REMOTE MAINTENANCE	(7)

K%LUSR:	TYPEIT	<USER>			;(-1) (377)
	JRST	K$MODE
K%LROP:	TYPEIT	<OPERATOR>		;(1)
	JRST	K$MODE
K%LRPR:	TYPEIT	<PROGRAMMER>		;(2)
	JRST	K$MODE
K%LRMN:	TYPEIT	<MAINTENANCE>		;(3)
K$MODE:	TYPEIT	< CONSOLE MODE !!!!>
	JRST	ABORT			;THAT'S ALL
	;KLINIK BAD PASSWORD  (5)

K%LBPW:	TYPEIT	<BAD PASSWORD #>
	MOVE	T1,T2			;GET # IN 'T1'
	PUSHJ	P,.TDECW		;OUTPUT IT
	TYPEIT	< IS:  >
	LDB	T1,[K.BPW1(P1)]		;GET FIRST CHARACTER
	PUSHJ	P,.TCHAR		;TYPE IT
	LDB	T1,[K.BPW2(P1)]		;SECOND
	PUSHJ	P,.TCHAR
	LDB	T1,[K.BPW3(P1)]		;THIRD
	PUSHJ	P,.TCHAR
	LDB	T1,[K.BPW4(P1)]		;FOURTH
	PUSHJ	P,.TCHAR
	LDB	T1,[K.BPW5(P1)]		;FIFTH
	PUSHJ	P,.TCHAR
	LDB	T1,[K.BPW6(P1)]		;SIXTH
	PUSHJ	P,.TCHAR
	TYPEIT	<  !!!!>
	JRST	ABORT			;THAT'S ALL

	;KLINIK UNSUCCESSFUL LOGON  (6)

K%LLTO:	TYPEIT	<UNSUCCESSFUL LOGON - >
	MOVE	T1,T2			;GET # OF GOOD PASSWORDS
	PUSHJ	P,.TDECW		;OUTPUT IT
	TYPEIT	< PASSWORDS ATTEMPTED !!!!>
	JRST	ABORT			;THAT'S ALL

	;KLINIK ACTIVE ON REBOOT  (7)

K%LRBA:	TYPEIT	<ACTIVE IN >
	PJRST	K%CON		;SAME AS 'KLINIK CONNECT'

	;THIS IS A MAP OF TE FORMAT OF TE  KLERROR FILE AFTER
	;IT IS REBUILT INTO SYSER'S LOW SEGMENT.  THE DEFINED
	;VALUES ARE THE OFFSETS TO THHE START OF THE FILE.
	
	KR.FTY==0		;KLERROR FORMAT VERSION
	KR.RLC==1		;RECORD LENGTH IN BYTES
	KR.TMYR==2		;TIME OF DAY - YEAR
	KR.TMMO==3		;   - MONTH
	KR.TMDA==4		;   - DAY
	KR.TMHR==5		;   - HOUR
	KR.TMMI==6		;   - MINUTE
	KR.TMSE==7		;   - SECOND

	KR.KSN==12		;KL SER #
	KR.ESN==13		;FE SER #
	KR.UVN==14		;MICRO CODE VERSION
	KR.MVN==15		;MONITOR VERSION
	KR.RVN==21		;FE SOFT VER #
	KR.ECD==23		;ERROR CODE
	KR.DG1==24		;DTE DIAG 1
	KR.DG2==25		;DTE DIAG 2
	KR.DGS==26		;DTE DIAG STATUS
	KR.DG3==27		;DTE DIAG 3
	KR.FNR==30		;START OF FUNCTION READ VALUES
	KR.IPE==330		;-11 RAD 50 ERROR WROD
	KR.CHK==337		;CHECKSUM FOR ABOVE DATA
	;HERE ARE ROUTINES TO DUMP KLEFIL 
FE$KLF:	TYPEIT	<
	CONTENTS OF KLERROR FILE:
>
	TYPEIT	<CONTENTS OF RECORD #1  SEEN AT FIRST ERROR
>
KLFCON:	TYPEIT	<	CREATED:  >
	MOVEI	P1,KR.TMYR		;OFFSET TO START OF DATE/TIME
	MOVE	T1,KLEFIL+1(P1)	;GET MONTH FIRST
	PUSHJ	P,.TDECW	;IN DECIMAL
	PUSHJ	P,.TCOLN
	MOVE	T1,KLEFIL+2(P1)	;NOW DAY
	PUSHJ	P,.TDECW
	PUSHJ	P,.TCOLN
	MOVE	T1,KLEFIL(P1)	;YEAR
	PUSHJ	P,.TDECW
	TYPEIT	< AT: >
	MOVE	T1,KLEFIL+3(P1)	;NOW HOUR
	PUSHJ	P,.TDECW
	PUSHJ	P,.TCOLN
	MOVE	T1,KLEFIL+4(P1)	;MINUTES
	PUSHJ	P,.TDECW
	PUSHJ	P,.TCOLN
	MOVE	T1,KLEFIL+5(P1)	;SECONDS
	PUSHJ	P,.TDECW
	
	TYPEIT	<	FILE FORMAT VERSION:	>
	MOVE	T1,KLEFIL	;1ST WORD IS VERSION #
	PUSHJ	P,.TOCTW
	TYPEIT	<	RECORD LENGTH:	>
	MOVEI	P1,KR.RLC		;OFFSET TO VALUE
	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
	PUSHJ	P,.TOCTW
	TYPEIT	< BYTES
>
;	TYPEIT	< BYTES
;	U-CODE VER:	>
;	MOVEI	P1,KR.UVN
;	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
;	PUSHJ	P,.ODECW	;IN DECIMAL
;	TYPEIT	<	FE SER #:	>
;	MOVEI	P1,KR.ESN
;	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
;	PUSHJ	P,.ODECW	;IN DECIMAL
;	TYPEIT	<	KL SER #:	>
;	MOVEI	P1,KR.KSN
;	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
;	PUSHJ	P,.ODECW	;IN DECIMAL
;	TYPEIT	<
;	MONITOR VER:	>
;	MOVEI	P1,KR.MVN
;	PUSHJ	P,FE$BWD	;GET 3 WORDS
;	PUSHJ	P,.ODECW
;ABOVE 17 LINES REMOVED WITH EDIT 517
;	TYPEIT	<	FE SOFTWARE VER:	>
;	MOVEI	P1,KR.RVN
;	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
;	PUSHJ	P,.ODECW	;IN DECIMAL
	MOVEI	P1,KR.ECD
	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
	MOVE	P2,T1		;SAVE IT FOR TRANSLATION
	SKIPN	T1		;[517] IF ZERO,
	 JRST	KLFCN1		;DON'T LIST IT
	TYPEIT	<
	EXCEPTION CODE:	>
	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
	PUSHJ	P,.TOCTW	;IN DECIMAL
	TYPEIT	< = >
;START EDIT [730]
;MAKE THE DECODE OF THE ERROR CODE A SUBROUTINE SO THAT BRIEF CAN USE IT
	PUSHJ	P,KR%ECD	;DECODE ERROR CODE
	JRST	KLFCN1		;CONTINUE IN LINE

KR%ECD:	TRNN	P2,1B35
	JRST	.+3
	TYPEIT	< CLK STOP,>
	TRNN	P2,1B34
	JRST	.+3
	TYPEIT	< DRAM PAR,>
	TRNN	P2,1B33
	JRST	.+3
	TYPEIT	< CRAM PAR,>
	TRNN	P2,1B32
	JRST	.+3
	TYPEIT	< FAST MEM PAR,>
	TRNN	P2,1B31
	JRST	.+3
	TYPEIT	< FIELD SERVICE STOP>
	POPJ	P,		;RETURN

;TAKEN OUT WITH EDIT [730]  (DOES NOTHING)
;	SKIPE	P2
;	JRST	.+3
;	 TYPEIT	<NONE>
;END EDIT [730]

KLFCN1:	PUSHJ	P,.TCRLF
	TYPEIT	<	DTE DIAG STATUS:	>
	MOVEI	P1,KR.DGS
	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
	PUSHJ	P,.TOCTW	;IN DECIMAL
	TYPEIT	<
	DTE DIAG 1:	>
	MOVEI	P1,KR.DG1
	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
	PUSHJ	P,.TOCTW	;IN DECIMAL
	TYPEIT	<	DTE DIAG 2:	>
	MOVEI	P1,KR.DG2
	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
	PUSHJ	P,.TOCTW	;IN DECIMAL
	TYPEIT	<	DTE DIAG 3:	>
	MOVEI	P1,KR.DG3
	MOVE	T1,KLEFIL(P1)	;GET THAT VALUE
	PUSHJ	P,.TOCTW	;IN DECIMAL
;NOW DUMP FUNCTION READS
	HRLI	P1,-100		;NUMBER TO DO
	HRRI	P1,KR.FNR		;STARTING OFFSET
	MOVEI	P2,0		;WHERE TO PUT THE WORDS
FE$KL1:	MOVE	T2,KLEFIL(P1)	;GET 1ST PORTION
	DPB	T2,[POINT 16,T1,35]
	ADDI	P1,1		;UPDATE
	MOVE	T2,KLEFIL(P1)	;GET 2ND
	DPB	T2,[POINT 16,T1,19]
	ADDI	P1,1		;UPDATE AGAIN
	MOVE	T2,KLEFIL(P1)	;GET 3RD
	DPB	T2,[POINT 4,T1,3]	;LAST BITS
	MOVEM	T1,KLEFIL(P2)	;PUT AWAY THE WORD
	AOS	P2
	AOBJN	P1,FE$KL1	;UPDATE & DO NEXT

;HERE SETUP TO CALL SYSERK TO LIST CONTENTS
	SETZ	15,	;CLEAR OLD STARTING ADDRESS
	MOVEI	14,FE$KLA	;SETUP RETURN ADDRESS
	MOVE	T1,[SIXBIT/SYSERK/]
	MOVEM	T1,OVRBLK+1	;HIS NAME
	MOVE	16,[SIXBIT/SYSERD/]	;OUR NAME FOR PROPER RETURN
	MOVEM	17,SAVEAC+17
	MOVEI	17,SAVEAC
	BLT	17,SAVEAC+16	;STORE AC'S
	JRST OVRLAY		;GO REPLACE US

;WHEN SYSERK IS FINISHED IT WILL CALL SYSERD BACK AND
;THE OVERLAY WILL USE THE NEXT LINE AS THE STARTING ADDRESS INSTEAD
;OF THAT STORED BY LINK
FE$KLA:	MOVEI	15,0		;CLEAR RETURN ADDRESS
	MOVEI	T1,CHROUT
	PUSHJ	P,.TYOCH	;RE-INIT SCAN ROUTINES
	PUSHJ	P,.TCRLF	;NEXT LINE PLEASE
	MOVEI	P1,KR.IPE		;MIGHT BE LOCATION 330??

	SKIPN	P2,KLEFIL(P1)	;ANY ERRORS DETECTED
	 JRST	FE$KLB		;NOPE
	TYPEIT	<**** DATA MAY NOT BE VALID ****>
	PUSHJ	P,.TCRLF
	TYPEIT	<	ERROR DETECTED:	>
	MOVE	T1,P2
	PUSHJ	P,R5VSIX	;CONVERT IT TO SIXBIT
	HRLZ	T1,T1		;MOVE IT OVER
	PUSHJ	P,.TSIXN	;NOW DUMP IT

FE$KLB:	SKIPE	KLEFL1		;-1 NOW SAYS WE JUST LISTED 2ND RECORD
	 JRST 	FE$KLC		;SO RETURN TO PROCSD
	HRRZ	T1,KLEPNT	;GET LAST ADDR USED TO BUILD THIS FILE
	CAIG	T1,KLE1FL	;USED SECOND RECORD?
	 JRST	FE$KLC		;NO-RETURN NOE
	CAIL	T1,KLEFIL	;ANY WORDS IN 2ND RECORD?
	 JRST FE$KLC		;NO SO DON'T GO ANY FURTHER
	SETOM	KLEFL1		;YES, WE MUST LIST THEM TOO
;*******
;IF DEBUGGING, BETTER PUT A BREAKPOINT HERE IF YOU WANT TO
;SEE THE CONTENTS OF THE 1ST RECORD.  IT WON'T BE AROUND MUCH
;LONGER!!!!!
;********
	SETZM	KLEFIL				;CLEAR
	MOVE	T1,[XWD KLEFIL,KLEFIL+1]	;THE FIRST
	BLT	T1,KLEEND-1			;FILE AREA
	MOVE	T1,[XWD KLE1FL,KLEFIL]	;THEN COPY THE 2ND RECORD
	BLT	T1,KLEEND-1	;TO THE 1ST RECORD AREA.
	PUSHJ	P,TITLST		;START ON NEXT PAGE
	TYPEIT	<

LISTING 2ND RECORD, THE LAST ERROR SEEN

>
	JRST	KLFCON	;USE ALL THE SAME CODE AGAIN
FE$KLC:	PUSHJ	P,TITLST	
	SETZM	KLEFL2		;NO MORE BUILDING OF KLEFIL
	SETZM	KLEFL3		;OR LISTING EITHER
	SETZM	KLEFL1		;CLEAR THAT ONE TOO
	POPJ	P,0	

;SPECIAL TRANSLATION FOR LP20 REGISTERS

LPCLST:	MOVE	P1,T1		;GET WORD
	TYPEIT	<COL. CNTR. = >
	LDB	T1,[POINT 8,P1,27]	;UPPER BYTE
	PUSHJ	P,.TOCTW
	TYPEIT	< CHAR. BUF = >
	LDB	T1,[POINT 8,P1,35]	;LOWER BYTE
	PUSHJ	P,.TOCTW
	PUSHJ	P,.TCRLF
	POPJ	P,0

LPDLST:	MOVE	P1,T1			;GET THE WORD
	TYPEIT	<CHKSUM = >
	LDB	T1,[POINT 8,P1,27]	;UPPER BYTE
	PUSHJ	P,.TOCTW
	TYPEIT	< LPT DATA = >
	LDB	T1,[POINT 8,P1,35]	;LOWER BYTE
	PUSHJ	P,.TOCTW
	PUSHJ	P,.TCRLF
	POPJ	P,0

	;SPECIAL ROUTINE FOR CODE 131 FRONT END RELOAD
	;P2 HAS R1%NUM

R1%000:	TYPEIT	<
	FRONT END #:	>
	MOVEI	T1,[ASCIZ/PRIVILEGED  /]
	TLZE	P2,1B18		;IS IT?
	 PUSHJ	P,.TSTRG		;YUP
	MOVE	T1,P2
	PUSHJ	P,.TOCTW
	MOVE	P3,WKBUFF+R1%STS	;GET STATUS WORD
	TYPEIT	<
	STATUS AT RELOAD:	>
	MOVE	P1,P3
	MOVEI	T1,45			;OFFSET
	MOVEM	T1,KONTYP
	PUSH	P,P3			;SAVE THE STATUS WORD
	PUSHJ	P,CNIDCD
	TYPEIT	<
	RETRIES:	>
	POP	P,P3		;GET STATUS BACK
	LDB	T1,[POINT 6,P3,35]
	PUSHJ	P,.TDECW
	;[534]
;[543]
	LDB	P1,[POINT 16,WKBUFF+R1%ERW,17]
	CAIN	P1,1		;NOTHING TO LIST?
	 POPJ	P,0		;YES, GO BACK
	PUSH	P,P1		;SAVE P1
	TYPEIT	<
	REASON FOR RELOAD:	>
	POP	P,P1		;RESTORE P1
	LDB	T1,[POINT 7,P1,35]
	PUSHJ	P,.TCHAR
	LDB	T1,[POINT 7,P1,27]
	PUSHJ	P,.TCHAR
	LDB	P1,[POINT 16,WKBUFF+R1%ERW,35]
	LDB	T1,[POINT 7,P1,35]
	PUSHJ	P,.TCHAR
	LDB	P1,[POINT 7,P1,27]	;[544]
	SKIPN	P1		;IF ZERO, DONT LIST IT
	 POPJ	P,0		;RETURN NOW
	PUSH	P,P1		;SAVE P1
	TYPEIT	<
	HIGH 7 BITS OF ADDRESS OF PARITY ERROR:	>	;[544]
	POP	P,T1		;GET ADDRESS TO LIST BACK FROM STACK
	PUSHJ	P,.TOCTW	;[544]
	POPJ	P,0
	;END[543]
	SKIPN	P1		;IF ZERO, DONT BOTHER
	 POPJ	P,0
	TYPEIT	<
	11'S MEMORY STATUS REG:	>
	MOVE	T1,P1
	PUSHJ	P,.TOCTW	;IN OCTAL
	TYPEIT	< = >
	TRNN	P1,1B20		;PARITY ERROR?
	 JRST	R1%001		;NO
	TYPEIT	< PARITY ERROR >
R1%001:	TRNN	P1,1B35		;ENABLED?
	 JRST	R1%002		;NO?
	TYPEIT	< ENABLED >
R1%002:	TYPEIT	< ADDR:(HIGH 7 BITS) >
	LDB	T1,[POINT 7,P1,30]	;GET IT
	PUSHJ	P,.TOCTW
	POPJ	P,0
	;END [534]
	POPJ	P,0
;CHNSTS--ROUTINE TO LIST CHANNEL STATUS
;P2 HOLDS FIRST WORD,  DEPENDS ON IDENTICAL OFFSETS TO
;INFO AS ARE USED IN SEC%MB ENTRY FORMAT

CHNSTS:	TYPEIT	<
CHANNEL INFORMATION:
	CHAN STATUS WD 0:	>
	MOVE	T1,P2
	PUSHJ	P,.TXWDW
	TYPEIT	<	CW1:  >
	MOVE	T1,WKBUFF+MB%CC1	;1ST CCW
	PUSHJ	P,.TXWDW
	TYPEIT	<  CW2:  >
	MOVE	T1,WKBUFF+MB%CC2	;2ND CCW
	PUSHJ	P,.TXWDW
	TYPEIT	<
	CHN STATUS WD 1:	>
	MOVE	T1,WKBUFF+MB%CS1
	MOVE	P1,T1			;SAVE IT
	PUSHJ	P,.TXWDW
	MOVEI	T1,44			;CORRECT OFFSET
	MOVEM	T1,KONTYP		;FINISH SETUP
	TYPEIT	< = >
	PUSHJ	P,CNIDCD
	TYPEIT	<
	CHN STATUS WD 2:	>
	MOVE	T1,WKBUFF+MB%CS2
	PUSHJ	P,.TXWDW
	POPJ	P,0	;RETURN TO CALLER
	;MB%000 ETC--	ROUTINES TO DO MOST OF THE WORK TO LIST
	;CODE 111 ENTRIES, MASSBUS DEVICE ERRORS.
	;DEVICE TYPE WORD IS IN P2 WHEN WE GET HERE
	;CALLED VIA PUSHJ FROM PROCSD RETURNS POPJ SEVERAL
	;PAGES FROM HERE.
	;CHANGED WITH [315] TO SUPPORT RP05 & RP06

MDE000:	0
	SIXBIT/RP04/		;THIS DEVICE NAME TABLE MUST BE KEPT
	SIXBIT/RS04/		; IN LINE WITH THE UNIT TYPE TABLE IN
	SIXBIT/TU45/		; THE UNIVERSAL FILE.  IN PARTICULAR
	SIXBIT/TU16/		; THERE MUST BE AT LEAST ".UTMAX" ITEMS
	SIXBIT/RP05/		; IN THE TABLE.
	SIXBIT/RP06/
	SIXBIT/RP07/		;RP07???
	SIXBIT/RP08/		;RP08???
	SIXBIT/RM03/		; [601]
	SIXBIT/TM03/
	SIXBIT/TU77/
	SIXBIT/TM78/
	SIXBIT/TU78/
	SIXBIT/DX20/		;[704]
	SIXBIT/TU70/
	SIXBIT/TU71/
	SIXBIT/TU72-E/		;END [704]

	;TYPE UNIT TYPE & S/N IF IT EXISTS

MB%000:	TYPEIT	<
	UNIT TYPE:	>
	MOVE P3,MDEDTP			;GET TYPE BACK
	MOVE	T1,MDE000(P3)		;GET IT IN SIXBIT
	PUSHJ	P,.TSIXN
	;NOW FOR SERIAL #
	MOVE	P2,WKBUFF+MB%REG+10	;LOCATION FOR RP04
	SKIPN	P2			;ANYTHING THERE?
	POPJ	P,0			;NO-LEAVE NOW
	TYPEIT	<
	UNIT SERIAL #:	>
DSERCD:	HRRZ	T1,P2			;4 BCD DIGITS RIGHT JUSTIFIED
	ANDI	T1,170000		;GET MSD
	LSH	T1,-14			;SHOVE IT DOWN
	PUSHJ	P,.TDECW		;OUTPUT IT
	HRRZ	T1,P2
	ANDI	T1,07400		;GET NEXT DIGIT
	LSH	T1,-10
	PUSHJ	P,.TDECW
	HRRZ	T1,P2			;GET NEXT DIGIT
	ANDI	T1,00360		;MASK IT OFF
	LSH	T1,-4
	PUSHJ	P,.TDECW		;OUTPUT IT
	HRRZ	T1,P2			;GET LSD
	ANDI	T1,0017			;STRIP
	PUSHJ	P,.TDECW
	TYPEIT	<.>
	POPJ	P,0			;NOW GO BACK TO PROCSD
	;HERE TO OUTPUT FAILURE LOCATION

MB%001:	MOVE T1,MDEDTP			;GET DEV TYPE BACK
	CAIN	T1,3			;MAGTAPE? - TU45?
	 JRST	.+3
	CAIE	T1,4			;TU16?
	 CAIN	T1,13			;TU77?
	  JRST MB%01C			;YUP
	
;HERE FOR LBN  (DISK)
	TYPEIT	<
	LBN:		>
	MOVE 	T1,WKBUFF+MB%LOC	;GET LBN
	PUSHJ	P,.TOCTW		;TYPE IN DECIMAL  [527]
	TYPEIT	<  =
	>
	MOVE	T1,MDEDTP		;GET TYPE AGAIN
	CAIN	T1,2			;RS04?
	 JRST	MB%01B			;YES! - BRANCH TO ROUTINE
	SETZ	P1,			;NO! - CLEAR INDEX POINTER [600]
	CAIN	T1,1			;RP04?
	 MOVEI	P1,5			;YES! - SET UP INDEX
	CAIN	T1,5			;RP05?
	 MOVEI	P1,6			;YES! - SET UP FOR RP05
	CAIN	T1,6			;RP06?
	 MOVEI	P1,7			;YES! - SET UP FOR RP06
	CAIN	T1,.UTRM3		;RM03?  [601]
	 MOVEI	P1,10			;YES!
	JUMPE	MB%01D			;RECOGNIZED DEVICE?  [600]
	MOVE	P3,WKBUFF+MB%LOC	;YES! - GET LBN
	CAMGE	P3,.MXBLK(P1)		;1ST UNIT OF STR?  [144]
	 JRST	MB%01A			;NO!
	SUB	P3,.MXBLK(P1)		;- 1 UNITS WORTH
	JRST	.-3			;AND TRY AGAIN
MB%01A:	TYPEIT	<CYL:   >
	IDIV	P3,.TRBLK(P1)		;GET CYL #
	MOVE	T1,P3
	PUSHJ	P,.ODECW		;SAY IT IN DECIMAL
	MOVE	P3,P4			;REMAINDER
	TYPEIT	<	SURF:   >
	IDIV	P3,.SUBLK(P1)		;SURFACE #
	MOVE	T1,P3
	PUSHJ	P,.ODECW		;AGAIN WITH ".".
	TYPEIT	<	SECT:   >
	MOVE	P3,P4			;REMAINDER
	IMUL	P3,.SECBK(P1)		;X SECTORS/BLOCK
	MOVE	T1,P3
	PUSHJ	P,.ODECW
	JRST	MB%01D			;GO AROUND MAGTAPE
	;HERE FOR LBN FOR RS04

MB%01B:	MOVE	P3,WKBUFF+MB%LOC	;GET LBN
	CAMGE	P3,.MXBLK+4		;[144]1ST UNIT IN STR?
	 JRST	.+3			;YES-OK
	SUB	P3,.MXBLK+4		;-1 UNITS WORTH
	JRST	.-3			;TRY AGAIN
	TYPEIT	<TRACK:   >
	IDIV	P3,.TRBLK+4		;GET TRK #
	MOVE	T1,P3
	PUSHJ	P,.ODECW		;SAY IT WITH FLOWERS
	MOVE	P3,P4			;REMAINDER
	TYPEIT	<	SECT:   >
	IMUL	P3,.SECBK+4		;GET SECTOR #
	MOVE	T1,P3
	PUSHJ	P,.ODECW
	JRST	MB%01D			;GO AROUND MAGTAPE

	;HERE FOR MAGTAPE FAILURE LOCATION
MB%01C:	TYPEIT	<
	LOCATION:    RECORD  #  >
	HRRZ	T1,WKBUFF+MB%LOC
	PUSHJ	P,.ODECW
	TYPEIT	<    OF FILE #  >
	HLRZ	T1,WKBUFF+MB%LOC
	PUSHJ	P,.ODECW
;NOW LIST USERS DIR AND PGM BUT ONLY FOT MAGTAPE
	MOVE P2,WKBUFF+MB%USR
	MOVEI	P1,[ASCIZ/
	USER'S LOGGED IN DIR:	/]
	PUSHJ	P,.PPNWT##		;DO TRANS
	PUSHJ	P,.TCRLF
	MOVE	P2,WKBUFF+MB%PGM
	MOVEI	P1,[ASCIZ/	USER'S PGM:	/]
	PUSHJ	P,.SIXBT##
	
;HERE AFTER DUMPING FAILURE LOCATION - NOW TO DUMP
	;OPERATION ISSUED TO DEVICE
MB%01D:	TYPEIT	<
	OPERATION AT ERROR:	>
	HRLZ	T1,WKBUFF+MB%ICR	;GET ISSUED CONTROL REG.
	MOVE	T2,MDEDTP		;SET UP INDEX
	PUSHJ	P,@MDE011(T2)		; LET ROUTINE DO WORK
	POPJ	P,0			;BACK TO PROCSD FOR A WHILE
;USE SAME ROUTINE FOR BOTH 111 &112, VALUE IS IN P2

DX%004:
MB%004:	TYPEIT	<
	RETRIES PERFORMED:	>
	HRRZ	T1,P2			;MB%FEC / DX%FEC HAS RETRIES(?)
	PUSHJ	P,.ODECW
	POPJ	P,0

	;MB%CNI IS IN P2

MB%002:	TYPEIT	<
	ERROR:	>
	MOVEI	T1,[ASCIZ/RECOVERABLE /];ASSUME LUCK
	MOVE	T2,WKBUFF+MB%IRS	;GET STATUS WORD
	TLNE	T2,1B20			;HARD ERROR?
	 MOVEI	T1,[ASCIZ/NON-RECOVERABLE /]	;OPPS
	PUSHJ	P,.TSTRG
	MOVE	T1,MASKON		;KONTROLLER TYPE
	MOVEM	T1,KONTYP
	MOVE	P1,P2			;FINISH SETUP
	PUSHJ	P,CNIDCD		;GO DECODE
	MOVE	T1,MASKON		;GET CONTROLLER TYPE BACK
	CAIN	T1,..RH11		;RH11?  [600]
	 JRST	MB%02			;YES! - NO CONI - SKIP
	TYPEIT	< IN CONTROLLER CONI
		>
	JRST	MB%02A
MB%02:	TYPEIT	< IN CONTROLLER STATUS 1
		>
MB%02A:	HRLZ	P1,WKBUFF+MB%REG+2	;GET DEVICE'S ERROR REGISTER
	MOVEI	T1,21			;ASSUME RP04,5,6, OR RM03
	MOVE	T2,MDEDTP		;BUT CHECK
	CAIN	T2,3			;FOR TU45 OR
	 MOVEI	T1,27
	CAIN	T2,4			;OR TU16
	 MOVEI	T1,27
	CAIN	T2,13			;OR TU77
	 MOVEI	T1,27
	CAIN	T2,2			;OR RS04
	 MOVEI	T1,25
	MOVEM	T1,KONTYP		;FINISH SETUP
	PUSHJ	P,CNIDCD		;GO TRANSLATE
	TYPEIT	< IN DEVICE ERROR REGISTER>
	PUSHJ	P,.TCRLF
		PUSH	P,P1
	SETZ	P1,
	PUSHJ	P,DETCHK	;SAID /DETAIL?
	POP	P,P1
	TYPEIT	<CONTROLLER INFORMATION:
	CONTROLLER:	>
	MOVE	T2,MASKON		;GET CONTROLLER TYPE
	MOVE	T1,[SIXBIT/RH20 #/]	;ASSUME RH20
	CAIN	T2,..RH10		;BETTER CHECK - RH10?
	 MOVE	T1,[SIXBIT/RH10 #/]	;YES! - CHANGE TEXT
	CAIN	T2,..RH11		;RH11?  [600]
	 MOVE	T1,[SIXBIT/RH11 #/]	;YES! - CHANGE TEXT
	PUSHJ	P,.TSIXN
	PUSHJ	P,.TSPAC
	MOVE	T1,WKBUFF+MB%CAD	;GET PHY ADDR
	PUSHJ	P,.TOCTW		;DUMP IN OCTAL
	MOVE	T1,MDEDTP		;GET DEVICE TYPE
	CAIE	T1,3			;MAGTAPE? - TU45?
	 CAIN	T1,4			;NO! - TU16?
	  PUSHJ	P,MB%02B		;YES! - LIST TM02/3 #
	MOVE	T1,MASKON		;GET CONTROLLER TYPE
	CAIN	T1,..RH11		;RH11?
	 JRST	MB%02C			;YES! - NO CONI - BRANCH
	;NOW DO CONI'S
	TYPEIT	<
	CONI AT ERROR:	>
	MOVE	T1,MASKON		;GET CONTROLLER TYPE
	MOVEM	T1,KONTYP
	MOVE	T1,WKBUFF+MB%CNI
	MOVE	P1,T1			;FINISH SETUP
	PUSHJ	P,.TXWDW		;IN HALF WORD FORMAT
	TYPEIT	< = >
	PUSHJ	P,CNIDCD		;GO DECODE
	TYPEIT	<
	CONI AT END:	>
	MOVE	T1,WKBUFF+MB%CIF
	MOVE	P1,T1
	PUSHJ	P,.TXWDW
	TYPEIT	< = >
	PUSHJ	P,CNIDCD
	POPJ	P,0			;BACK TO PROCSD

MB%02B:	HRRZ	T2,WKBUFF+MB%REG+6	;GET HDWR UNIT TYPE
	ANDI	T2,77			;ALONE
	MOVEI	T1,[ASCIZ/  TM03 #:  /]	;ASSUME A TM03
	CAIG	T2,50			;CHECK
	 MOVEI	T1,[ASCIZ/  TM02 #:  /]	;CHANGE IT
	PUSHJ	P,.TSTRG		;NOW LIST IT  [536]
	HRRZ	T1,WKBUFF+MB%UAD	;GET LOGICAL ADDRESS
	PUSHJ	P,.TOCTW		;LIST IN OCTAL
	POPJ	P,0			;RETURN

	;HANDLE RH11/UBA FOR 2020  - START EDIT  [600]

MB%02C:	MOVEI	T1,53			;C&S2 OFFSET
	MOVEM	T1,KONTYP		;SAVE IT
	TYPEIT	<
	RH11 STATUS 2 AT ERROR:	>
	MOVE	T1,WKBUFF+MB%S2I	;GET INITIAL RH11 STATUS 2
	MOVE	P1,T1
	PUSHJ	P,.TXWDW		;OUTPUT IN HALF WORDS
	TYPEIT	< = >
	PUSHJ	P,CNIDCD		;DECODE BITS
	TYPEIT	<
	RH11 STATUS 2 AT END:	>
	MOVE	T1,WKBUFF+MB%S2F	;GET FINAL RH11 STATUS 2
	MOVE	P1,T1
	PUSHJ	P,.TXWDW		;OUTPUT IN HALF WORDS
	TYPEIT	< = >
	PUSHJ	P,CNIDCD		;DECODE BITS
	MOVEI	T1,..UBA		;SET UP TO DECODE UBA STATUS
	MOVEM	T1,KONTYP
	TYPEIT	<
	UBA STATUS,MAP AT ERR:	>
	MOVE	T1,WKBUFF+MB%UBI	;GET INITIAL UBA STATUS
	MOVE	P1,T1
	PUSHJ	P,.TXWDW		;OUTPUT IN HALF WORDS
	TYPEIT	< = >
	PUSHJ	P,CNIDCD		;DECODE BITS
	TYPEIT	<
	UBA STATUS,MAP AT END:	>
	MOVE	T1,WKBUFF+MB%UBF	;GET FINAL UBA STATUS
	MOVE	P1,T1
	PUSHJ	P,.TXWDW		;OUTPUT IN HALF WORDS
	TYPEIT	< = >
	PUSHJ	P,CNIDCD		;DECODE BITS

	;NOW TO STOP USING PROCESS TABLE AND TAKE CONTROL OURSELF
	MOVE	P2,MB%CS0		;SET UP FOR CHANNEL STATUS
	PUSHJ	P,MB%003		;FINISH ENTRY
	JRST	ABORT			;DON'T GO BACK TO PROCESS TABLE!

	; END EDIT  [600]
	;MB%CS0 IS IN P2
MB%003:	PUSHJ	P,CHNSTS		;GO LIST CHANNEL STATUS INFO,P2 
					;IS ALREADY SET UP
;SETUP AND CALL ROUTINES TO DUMP 16 DEVICE REGISTERS

	TYPEIT	<
DEVICE REGISTER INFORMATION:
		AT ERROR	AT END		DIFF.		TEXT
>
	MOVE	T1,MDEDTP		;GET UNIT TYPE
	MOVE	P1,[XWD 1,20]		;SETUP P1 FOR MODE 1 AND 20 ITEMS
	CAIN	T1,3			;MAGTAPE? - TU45?
	 JRST 	.+3
	CAIE	T1,4			; TU16?
	 CAIN	T1,13			; TU77?
	  HRRI	P1,12			;CHANGE # OF ITEMS
	HRLZI	P2,MASREG		;STARTING ADDR OF TABLE
					; OF SIXBIT REG NAMES
	CAIE	T1,3			;MAGTAPE? - TU45?
	 CAIN	T1,4			; TU16?
	  HRLI	P2,TU6REG		;CHANGE REGISTER NAMES
	CAIN	T1,.UTRM3		;RM03?  [601]
	 HRLI	P2,RM03RG		;YES! - SETUP FOR RM03 REGISTERS
	HRR	P2,MSCNTL(T1)		;SETUP P2
	MOVE	P3,[XWD MB%REG,MB%REG]	;WHERE TO FIND WORDS.
	PUSHJ	P,HWDUMP		;IF ALL GOES WELL
	PJRST	DEVSTS			;NOW GO LIST DEVICE STATISTICS
	;[EDIT 215]
	;NOW LIST DEVICE STATS AT TIME OF ERROR
	;DEVSTS IS CALLED FOR BOTH CODE111 &112 ENTRIES AND DEPENDS
	;ON IDENTICAL FORMATS AND LOCATIONS IN THE ERROR FILE ENTRY!!!

	;***********************
DEVSTS:	TYPEIT	<DEVICE STATISTICS AT TIME OF ERROR:
# OF READS:	>
	MOVE	T1,WKBUFF+MB%RED
	PUSHJ	P,.ODECW
	TYPEIT	<	# OF WRITES:	>
	MOVE	T1,WKBUFF+MB%WRT
	PUSHJ	P,.ODECW
	TYPEIT	<	# OF SEEKS:	>
	MOVE	T1,WKBUFF+MB%SEK
	PUSHJ	P,.ODECW
	TYPEIT	<
# SOFT READ ERRORS:	>
	MOVE	T1,WKBUFF+MB%SRE
	PUSHJ	P,.ODECW
	TYPEIT	<	# SOFT WRITE ERRORS:	>
	MOVE	T1,WKBUFF+MB%SWE
	PUSHJ	P,.ODECW
	TYPEIT	<
# HARD READ ERRORS:	>
	MOVE	T1,WKBUFF+MB%HRE
	PUSHJ	P,.ODECW
	TYPEIT	<	# HARD WRITE ERRORS:	>
	MOVE	T1,WKBUFF+MB%HWE
	PUSHJ	P,.ODECW
	TYPEIT	<
# SOFT POSITIONING ERRORS:	>
	MOVE	T1,WKBUFF+MB%SPE
	PUSHJ	P,.ODECW
	TYPEIT	<	# HARD POSITIONING ERRORS:	>
	MOVE	T1,WKBUFF+MB%HPE
	PUSHJ	P,.ODECW
	TYPEIT	<
# OF MPE:  >
	MOVE	T1,WKBUFF+MB%MPE
	PUSHJ	P,.ODECW
	TYPEIT	<   # OF NXM:  >
	MOVE	T1,MB%NXM
	PUSHJ	P,.ODECW
	TYPEIT	<   # OF OVERRUNS:  >
	MOVE	T1,WKBUFF+MB%OVR
	PUSHJ	P,.ODECW
	;END EDIT 215
	PUSHJ	P,TITLST	;EDIT 116 START ON NEXT PAGE
	POPJ	P,0		;WE'RE DONE!
	;EDIT [510]

	;DX%000 ETC--	ROUTINES TO DO MOST OF THE WORK TO LIST
	;CODE 112 ENTRIES, DX20 DEVICE ERRORS.
	;DEVICE TYPE WORD IS IN P2 WHEN WE GET HERE
	;CALLED VIA PUSHJ FROM PROCSD RETURNS POPJ SEVERAL
	;PAGES FROM HERE.


	;SETUP FOR SUB-BLOCK INDEX POINTERS


DX%000:	HRRZ	T3,WKBUFF+DX%MBR	;MASBUSS REG SUB-BLOCK POINTER
	ADDI	T3,WKBUFF		;CREATE BUFFER POINTER
	MOVEM	T3,SUBLK1		;SAVE IT
	HRRZ	T4,WKBUFF+DX%DVL	;DEVICE VALUE SUB-BLOCK POINTER
	ADDI	T4,WKBUFF		;CREATE BUFFER POINTER
	MOVEM	T4,SUBLK2		;SAVE IT

	;TYPE UNIT TYPE & S/N

	TYPEIT	<
	UNIT TYPE:	>
	MOVE	P3,MDEDTP		;GET TYPE BACK
	MOVE	T1,MDE000(P3)		;GET IT IN SIXBIT
	PUSHJ	P,.TSIXN

	;NOW FOR SERIAL #
	LDB	T1,[POINT 8,DT%SBE(T4),9]	;LOW PART
	LDB	T2,[POINT 8,DT%SBD(T4),35]	;HIGH PART
	DPB	T2,[POINT 8,T1,27]	;COMBINE HIGH & LOW PARTS
	SKIPN	T1			;ANYTHING THERE?
	 POPJ	P,0			;NO! - LEAVE
	PUSH	P,T1			;SAVE WHAT TO LIST
	TYPEIT	<
	UNIT SERIAL #:	>
	POP	P,T1			;RESTORE WHAT TO LIST
	PJRST	.ODECW			;OUTPUT IN DECIMAL


	;ROUTINE TO OUTPUT FAILURE LOCATION

DX%001:	MOVE	T1,MDEDTP		;GET DEV TYPE BACK
	;[704]
	CAIGE	T1,.UTDX2		;IN RANGE?
	 POPJ	P,0
	CAILE	T1,.UTT72
	 POPJ	P,0
	;END [704]
	TYPEIT	<
	LOCATION:    RECORD  #	>
	HRRZ	T1,WKBUFF+DX%LOC	;GET LOCATION WORD
	PUSHJ	P,.ODECW		;OUTPUT IN DECIMAL
	TYPEIT	<    OF FILE #	>
	HLRZ	T1,WKBUFF+DX%LOC	;GET FILE #  PART
	PUSHJ	P,.ODECW		;OUTPUT IN DECIMAL

	;NOW DUMP OPERATION ISSUED TO DEVICE

	TYPEIT	<
	OPERATION AT ERROR:	>
	HRLZ	T1,WKBUFF+DX%ICR	;GET ISSUED CONTROL REGISTER
	MOVE	T2,MDEDTP		;SETUP INDEX
	PJRST	@MDE011(T2)		; LET ROUTINE DO WORK
	;MORE EDIT [510]

	;ROUTINE TO TYPE OUT ERROR INFORMATION
	;ALSO OUTPUTS CONTROLLER CONI INFO IF /DETAIL  IS SET


DX%002:	TYPEIT	<
	ERROR:	>
	MOVEI	T1,[ASCIZ/RECOVERABLE /]	;ASSUME LUCK
	MOVE	T2,WKBUFF+DX%IRS	;GET STATUS WORD
	TLNE	T2,1B20			;HARD ERROR?
	 MOVEI	T1,[ASCIZ/NON-RECOVERABLE /]	;OPPS
	PUSHJ	P,.TSTRG
	MOVE	T1,MASKON		;KONTROLLER TYPE  (RH20)
	MOVEM	T1,KONTYP
	MOVE	P1,P2			;FINISH SETUP
	PUSHJ	P,CNIDCD		;GO DECODE
	TYPEIT	< IN CONTROLLER CONI
		>
	MOVE	T3,SUBLK1		;GET SUB-BLOCK POINTER
	HRLZ	P1,DM%ER(T3)		;GET DEVICE ERROR REGISTER
	MOVEI	T1,51			;BETTER BE TU70!!!
	MOVEM	T1,KONTYP		;FINISH SETUP
	PUSHJ	P,CNIDCD		;GO TRANSLATE
	TYPEIT	< IN DEVICE ERROR REGISTER>
	PUSHJ	P,.TCRLF
	PUSH	P,P1
	SETZ	P1,
	PUSHJ	P,DETCHK	;SAID /DETAIL?
	POP	P,P1
	TYPEIT	<CONTROLLER INFORMATION:
	CONTROLLER:	>
	MOVE	T2,MASKON		;GET CONTROLLER TYPE
	MOVE	T1,[SIXBIT/RH20 #/]	;ASSUME RH20
	PUSHJ	P,.TSIXN
	PUSHJ	P,.TSPAC
	MOVE	T1,WKBUFF+DX%CAD	;GET PHY ADDR
	PUSHJ	P,.TOCTW		;DUMP IN OCTAL
	TYPEIT	<  DX20/>
	;START [716-RLD]
	HRRZ	T1,WKBUFF+DX%DVL	;GET PNTR
	MOVE	T2,WKBUFF+DT%SBC(T1)	;[721]GET SENSE BYTES 8-11
	MOVEI	T1,[ASCIZ/TX02  #:	/]	;ASSUME TX02
	TLNN	T2,1B32			;[721]REALLY BIT 14 SB.-9,B4
	 MOVEI	T1,[ASCIZ/TX01  #:	/]	;BETTER CHANGE
	PUSHJ	P,.TSTRG		;PRINT SOMETHING
	;END[716]
	HRRZ	T1,WKBUFF+DX%UAD	;GET LOGICAL ADDRESS
	PUSHJ	P,.TOCTW		;LIST IN OCTAL

	;START [716-RLD]
	TYPEIT	<
	DX20 U-CODE VERSION:	>
	LDB	T1,[POINT 6,WKBUFF+DX%VER,25]	;[720]GET VERSION #
	PUSHJ	P,.TOCTW
	TYPEIT	<(>
	LDB	T1,[POINT ^D10,WKBUFF+DX%VER,35]	;[720]AND EDIT #
	PUSHJ	P,.TOCTW
	TYPEIT	<)>
	;END [716-RLD]
	;NOW DO CONI'S
	TYPEIT	<
	CONI AT ERROR:	>
	MOVE	T1,MASKON		;GET CONTROLLER TYPE
	MOVEM	T1,KONTYP
	MOVE	T1,WKBUFF+DX%CNI
	MOVE	P1,T1			;FIN