Google
 

Trailing-Edge - PDP-10 Archives - AP-4172F-BM - 3a-sources/syserb.mac
There are 15 other files named syserb.mac in the archive. Click here to see a list.
;<BAKER.SYSERR>SYSERB.MAC.7, 28-Jul-78 13:39:08, Edit by BAKER
;<BAKER.SYSERR>SYSERB.MAC.6, 21-Jul-78 13:22:16, Edit by BAKER
;<BAKER.SYSERR>SYSERB.MAC.5, 21-Jul-78 13:15:37, Edit by BAKER
;<BAKER.SYSERR>SYSERB.MAC.4, 20-Jul-78 17:20:43, Edit by BAKER
;<BAKER.SYSERR>SYSERB.MAC.3, 12-Jul-78 11:19:19, Edit by BAKER
;<BAKER.SYSERR>SYSERB.MAC.2, 11-Jul-78 09:56:25, Edit by DRUEKE
;FIX ENTRY SWITCH
;<SYSERR>SYSERB.MAC.3,  4-Jul-78 11:40:29, EDIT BY WOJCIK
;HERE TO FIX UNDEFINED GLOBAL A TAPL01+1
;<SYSERR>SYSERB.MAC.2, 26-Jun-78 11:34:19, EDIT BY IQL-BAKER
;<SYSERR>SYSERB.MAC.1, 22-Jun-78 11:18:50, EDIT BY WOJCIK
;HERE WE BEGIN TRACKING EDITS



	TITLE	SYSERB -- 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	;LOW SEG DEFINITIONS


	.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<
	DUM002
	DUM004
	DUM011
	DUM015
	DUM016	;[715]
	DUM021
	DUM042
	DUM050
>



	;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
	EXTERNAL CNISUM,BADNAM,MASSVM,DEVCHK,ERRINT,SKIPIT,IDCHK
	EXTERNAL STRCHK,DETCHK,DMPENT,HDRLST,PAGXCD,DVCHAR,TMCHAR
	EXTERNAL SAYDAY,GETNBS,.OCTLE,.DECML,.ASCIE,.SIXBT
	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,ACREG,NOTRAN





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


	.JBVER==137
	LOC	.JBVER

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


	TWOSEG
	RELOC	400000
	;DUMMY TO COMPILE PACKAGE
MASNA2:
MASLT2==0
MDECHA:
KLEDMP:	BLOCK	1		;GIVE IT SOME SPACE

	;PROCSA -- STANDARD ENTRY PROCESSOR #1
	;CALL	JRST PROCSB
	;
	;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

PROCSB:	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	;[153]DONT TRY TO ACCESS WORDS OUTSIDE OF ENTRY
	AOJA	CTINDX,PROCSB	;GET NEXT WORD IN CTL TABLE
	CAILE	T2,WKSIZE	;MAKE SURE THE WORD ASKED FOR IS IN WORK BUFFER
	AOJA	CTINDX,PROCSB	;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,PROCSB	;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 PROCSA
	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,PROCSB	;BUMP CTINDX AND BACK TO START
	SUBTTL	DIALOG RELATED SUBROUTINES
	;HERE IS THE DUMMY PROCSB 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
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 PROCSA

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

PROCSD:	MOVE	T1,[SIXBIT/SYSERD/]
	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 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



	;STARTB-- ROUTINE TO START AT WHEN OVERLAYED
	;TO CORRECTLY PROCESS CURRENT ENTRY.

STARTB:	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
	TLZ	F,F.BTCK	;CLEAR EXAMINE ENTRY FLAG
	TRNN	F,F.ENT		;/ENTRY ?  [752]
	TRNE	F,F.SEQ
	 JRST	START1
	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
	FATAL	<ENTRY WITH ZERO LENGTH BODY SPECIFIED>
	MOVE	P4,ERRIND
	TLNE	F,F.BTCK	;ANY TO DO?
	PUSHJ	P,@BITCHK(P4)	;GO DO IT
	TRNE	F,F.REM		;[417]/REMOTE?
	 PUSHJ	P,REMDAT##
	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	<TASCI>

	;NXMLST-- SPECIAL ROUTINE FOR KA/KI NXM LISTINGS
	;P2 HAS NXMKPG

NXMLST:	SETOM	KFLAG		;ASSUME K OF CORE
	TRNE	P2,1B35		;BUT CHECK
	 SETZM	KFLAG		;AND CHANGE IF NECESSARY
	TYPEIT	<
PHYSICAL MEMORY PLACED OFF-LINE:
>
	MOVE	P1,WKBUFF+NXMBEF	;GET PNTR TO FIRST TABLE
	PUSHJ	P,BLDPTR		;CORRECT IT
	MOVE	P2,P1			;SAVE IT
	MOVE	P1,WKBUFF+NXMAFT	;AFTER TABLE
	PUSHJ	P,BLDPTR
	PUSHJ	P,XORTAB	;FIND DIFFERENCES
	PUSHJ	P,BITLST	;LIST THOSE FOUND
	POPJ	P,0		;RETURN TO PROCSA

	;CSCLST-- ROUTINES TO DO CONFIG CHANGE ENTRIES
	;STARTS WITH CSCSTS IN P2

CSCLST:	TYPEIT	<	DEVICE:		>
	MOVE	T1,WKBUFF+CSCNAM	;GET A NAME
	TLNE	P2,1B32			;CONFIG CODE = 10-17?
	 MOVE	T1,[SIXBIT/MEMORY/]	;CHANGE THE DEV NAME
	PUSHJ	P,.TSIXN		;SAY IT
CSCLS1:	TYPEIT	<
	COMMAND:	>
	LDB	P1,[POINT 6,WKBUFF+CSCSTS,17]	;GET CONFIG CODE
	MOVEI	T1,[ASCIZ/ATTACH/]	;THAT'S A DEFAULT
	CAIN	P1,1			;BUT IF DET
	 MOVEI	T1,[ASCIZ/DETACH/]
	CAIN	P1,2			;EXCH?
	 MOVEI	T1,[ASCIZ/EXCHANGE WITH/]
	CAIN	P1,10			;MEM ON-LINE
	 MOVEI	T1,[ASCIZ/SET MEM ON-LINE/]
	CAIN	P1,11			;OFF-LINE?
	 MOVEI	T1,[ASCIZ/SET MEM OFF-LINE/]
	PUSHJ	P,.TSTRG		;SAY WHATEVER
	CAIE	P1,2			;EXCH?
	 JRST	CSCLS2			;NO GO AROUND
	TYPEIT	<  >
	MOVE	T1,WKBUFF+CSCNM2	;GET SECOND NAME
	PUSHJ	P,.TSIXN		;IN SIXBIT

CSCLS2:	LDB	P1,[POINT 12,WKBUFF+CSCSTS,11]	;GET A REASON
	SKIPN	P1			;ANYTHING THERE?
	 JRST	CSCLS3			;FORGET IT
	TYPEIT	<
	REASON:	>
	SETZ	T1,
	DPB	P1,[POINT 12,T1,11]	;MOVE IT OVER
	PUSHJ	P,.TSIXN
	POPJ	P,0

CSCLS3:	MOVE	P1,WKBUFF+CSCSTS
	TLNN	P1,1B32		;MEMORY INVOLVED
	 POPJ	P,0		;NO
	SETZM	KFLAG		;ASSUME PAGES
	TRNE	P1,1B35		;CHECK FOR K
	 SETOM	KFLAG		;FIX IT
	TYPEIT	<
MEMORY PLACED >
	MOVEI	T1,[ASCIZ/ON-LINE: /]
	TLNE	P1,1B35		;ON-LINE?
 	MOVEI	T1,[ASCIZ/OFF-LINE: /]
	PUSHJ	P,.TSTRG	;SAY IT
	PUSHJ	P,.TCRLF
	MOVE	P1,WKBUFF+CSCNAM	;POINTR TO TABLE BEFORE CHANGE
	PUSHJ	P,BLDPTR		;CORRECT IT
	MOVE	P2,P1			;SETUP
	MOVE	P1,WKBUFF+CSCNM2	;POINTR TO TABLE AFTER CHANGE
	PUSHJ	P,BLDPTR
	PUSHJ	P,XORTAB		;FIND DIFFERENCES
	PUSHJ	P,BITLST		;LIST THOSE FOUND
	POPJ	P,0

	;MSEJOB-- ROUTINE TO DUMP RESULT AND # JOBS
	;AFFECTED FOR CODE 2 ENTRIES

MSEJOB:	TYPEIT	<
	STOPCD NAME:	>
	HLLZ	T1,WKBUFF+MSESPC	;GET NAME BY ITSELF
	PUSHJ	P,.TSIXN		;IN SIXBIT
	MOVEI	T1,[ASCIZ/
	RESULT:		/]
	PUSHJ	P,.TSTRG	;OUTPUT MESSAGE
	MOVEI	T1,NDSTMP
	MOVEI	T2,NDSPER
	MOVE	T3,WKBUFF+MSENDS	;CURRENT COUNTS
	PUSHJ	P,COMPAR		;GO CHECK
	TLNN	F,F.CHNG		;DID IT CHANGE?
	JRST	MSEJB1			;NO-CHECK JOBS
	MOVEI	T1,[ASCIZ/CONTINUED SYSTEM/]
	PUSHJ	P,.TSTRG
MSEJB1:	MOVEI	T1,NJSTMP
	MOVEI	T2,NJSPER
	MOVE	T3,WKBUFF+MSENJS	;GET CURRENT
	PUSHJ	P,COMPAR		;GO CHECK
	TLNN	F,F.CHNG		;DID IT CHANGE?
	 POPJ	P,0			;GO BACK NOW
	MOVEI	T1,[ASCIZ/CRASHED JOB/]
	PUSHJ	P,.TSTRG	;GO SAY WHAT HAPPENED
	POPJ	P,0		;RETURN TO PROCSA	AND LIST
				;JOB INFORMATION FOR EITHER DEBUG
				;OR JOB STOPCD'S.


	;HERE CHECK FOR DETAIL SWITCH AND THEN DUMP CRASH AC'S ETC

MSEDET:	SETZ	P1,
	PUSHJ	P,DETCHK
	TYPEIT	<
	CONTENTS OF AC'S AT STOPCD:
>
	MOVEI	P1,MSEA00	;SETUP
	HRLI	P1,-20
	PUSHJ	P,ACLST		;[427]LIST
	TYPEIT	<

	PI STATUS:	>
	MOVE	T1,WKBUFF+MSEPIS	;GET THAT WORD
	PUSHJ	P,.TXWDW
	PUSHJ	P,TITLST		;START ON NEXT PAGE
	POPJ	P,0			;GO BACK
	;ROUTINES TO SPECL LISTING FOR CODE 50 ENTRIES
	;ER.DLE  DL10 HARDWARE ERRORS

DLELST:	TYPEIT	<
	UNIT:	>
	HLRZ	T1,WKBUFF+DLESTS
	CAILE	T1,7		;IN RANGE?
	 JRST	DLELS1		;OPPPS
	SKIPN	T1
	 JRST	DLELS1		;0?
	MOVE	T1,DLETYP(T1)
	PUSHJ	P,.TSTRG	;SAY TYPE FE

DLELS2:	TYPEIT	<
	DL10 PORT:	>
	HRRZ	T1,WKBUFF+DLEPRT
	PUSHJ	P,.TOCTW
	TYPEIT	<
	ERROR:	>
	MOVEI	T1,11		;MAGIC # FOR DL10 DATAI DLC
	MOVEM	T1,KONTYP
	MOVE	P1,WKBUFF+DLEDTI	;SETUP
	PUSHJ	P,CNIDCD
	PUSHJ	P,.TCRLF
	POPJ	P,0		;RETURN TO PROCSA

DLELS1:	TYPEIT	<UNKNOWN>
	JRST	DLELS2		;THAT'S EASY ENOUGH

DEVCOD:	;0	;ADD IT HERE

DLETYP:	0
	[ASCIZ/	DC76/]
	[ASCIZ/	DC44/]
	[ASCIZ/	DC44&DC76/]
	[ASCIZ/	DECSYNC DC75/]
	[ASCIZ/	DAS78/]
	[ASCIZ/	DC75-DDCMP/]
	[ASCIZ/ DAS85/]


	;HERE DECODE DL10 CONI AND DATAI
	;CONI IS ALREADY IN P2
DLEDCD:	TYPEIT	<
CONTROLLER INFORMATION:
	CONI DLC:	>
	MOVE	T1,P2
	PUSHJ	P,.TXWDW
	MOVEI	T1,10		;OFFSET FOR DL10 CONI
	MOVEM	T1,KONTYP
	TYPEIT	< = >
	MOVE	P1,P2	
	PUSHJ	P,CNIDCD	;GO TRANSLATE
	TYPEIT	<
	DATAI DLC:	>
	MOVEI	T1,11		;OFFSET FOR DATAI DLC
	MOVEM	T1,KONTYP
	MOVE	P1,WKBUFF+DLEDTI	;GET DATAI WD
	MOVE	T1,P1
	PUSHJ	P,.TXWDW
	TYPEIT	< = >
	PUSHJ	P,CNIDCD	;TRANSLATE
	POPJ	P,0		;TO PROCSA



	;HERE TO DUMP 11 BASED INFO IF DESIRED
DLELEI:	SETZ P1,
	PUSHJ	P,DETCHK
	TYPEIT	<
11 BASED INFORMATION:
>
	HRRZ	P1,WKBUFF+DLESTS	;GET 11 PC WD
	SKIPN	P1
	 JRST	DLELE1			;DONT IF 0
	TYPEIT	<	11 PC:	>
	MOVE	T1,P1
	PUSHJ	P,.TOCTW		;IN OCTAL
	PUSHJ	P,.TCRLF
DLELE1:	HRRZ	P1,WKBUFF+DLEERR	;GET FAILURE CODE
	SKIPN	P1
	 JRST	DLELE2			;AGAIN NOT IF 0
	TYPEIT	<	11 FAILURE CODE:	>
	MOVE	T1,P1
	PUSHJ	P,.TOCTW
	MOVEI	T1,34			;OFFSET FOR THIS CODE WORD
	MOVEM	T1,KONTYP
	TYPEIT	< = >
	PUSHJ	P,CNIDCD		;TRANSLATE
	PUSHJ	P,.TCRLF
DLELE2:	HRRZ	P1,WKBUFF+DLERHS	;GET 11 DL10 STATUS
	SKIPN	P1
	 JRST	DLELE3
	TYPEIT	<	11 STATUS FROM DL10:	>
	MOVE	T1,P1
	PUSHJ	P,.TOCTW
	MOVEI	T1,35			;CORRECT OFFSET
	MOVEM	T1,KONTYP
	TYPEIT	< = >
	PUSHJ	P,CNIDCD		;TRANSLATE THIS TOO
	PUSHJ	P,.TCRLF
DLELE3:	MOVE	P1,WKBUFF+DLECOD	;GET 11 STOPCD WORD
	SKIPN	P1
	 JRST	DLELE4
	TYPEIT	<	11 STOPCD:	>
	MOVE	T1,P1
	PUSHJ	P,.TSIXN		;IN SIXBIT
	PUSHJ	P,.TCRLF
DLELE4:	HLRZ	P1,WKBUFF+DLEPER		;PERIPHERAL?
	SKIPN	P1
	 PJRST	TITLST			;START ON NEXT PG & RETURN
					;TO PROCSA
	TYPEIT	<	11 DEV:	>
	MOVE	T1,DEVCOD(P1)		;ASCIZ ADDR
	PUSHJ	P,.TSTRG
	TYPEIT	<
	11 DEV STATUS:	>
	HRRZ	T1,WKBUFF+DLEPER	;GET DEV'S STATUS REGISTER
	PUSHJ	P,.TOCTW		;IN OCTAL AND NO TRANSLATION
	PJRST	TITLST			;THATS ALL-START ON NEXT PAGE 
					;THEN RETURN TO PROCSA
	;TMEA -- ROUTINE TO LIST ERROR CODE 20 ENTRIES.

	FUNMSK==17000	;LOCATION OF FUNCTION MASK IN CONI TMC.
	FUNSFT==11	;HOW FAR TO SHIFT IT.
	DENMSK==300	;MASK FOR DENSITY BITS.
	DENSFT==6	; SHIFTER.
	CORDMP==20000	; CORE DUMP BIT.
	PARTYP==40000	; PARITY BIT.
	STRK==4		;7 TRACK BIT.
	WLOCK==10	;WRITE LOCK BIT.



	;HERE ARE THE MESSAGES FOR THE FUNCTION DECODE
	;AND DENSITY MESSAGES.  INDEXED BY FUNCTION CODE.

FUNMSG:	[ASCIZ\	NO-OP\]

	[ASCIZ\	REWINDING\]
	[ASCIZ\	READ RECORD\]
	[ASCIZ\	READ-COMPARE RECORD\]	
	[ASCIZ\	WRITE\]
	[ASCIZ\	MARK END OF FILE\]
	[ASCIZ\ SPACE RECORDS FORWARD\]
	[ASCIZ\	SPACE RECORDS REVERSE\]
	[ASCIZ\ INTERRUPT WHEN UNIT READY\]
	[ASCIZ\	REWIND AND UNLOAD\]
	[ASCIZ\	READ MULTIRECORD\]
	[ASCIZ\	READ-COMPARE MULTIRECORD\]
	[ASCIZ\	ERASE AND WRITE\]
	[ASCIZ\	ERASE\]
	[ASCIZ\	SPACE FILE FORWARD\]
	[ASCIZ\	SPACE FILE REVERSE\]

DENMSG:	[ASCIZ\	200 BPI,\]
	[ASCIZ\	556 BPI,\]
	[ASCIZ\	800 BPI,\]
	[ASCIZ\	800 BPI,\]
	;EPELOR-- ROUTINE TO BUILD LOGICAL ANDS & ORS
	;OF PDP11 WORDS.  CAN HANDLE TWO SEPERATE WORDS PER CALL
	;SETUP	P1= WORDS TO BE ANDED & ORED
	;	P2=ADDRESS OF WHERE TO BUILD THE LOGICALS
	;	   LH=ADDRESS FOR ANDS
	;	   RH=ADDRESS FOR ORS. EITHER = 0 THEN CORRESPONDING
	;		HALF OF P1 IS LEFT ALONE
	;NOTE P2 IS LEFT UNTOUCHED TO FACILITATE REPEAT CALLS
	;CALL-- PUSHJ	P,EPELOR
	;RTN -- CALL+1
	;USES T1-T4

EPELOR:	HRRZ	T3,P2			;SETUP	INDEX FOR LH WORD
	HLRZ	T4,P2			;AND RH
	SKIPN	T3			;WORK ON LH?
	 JRST 	EPEL.1			;NO
	HLRZ	T1,P1			;LOG AND FIRST
	HLRZ	T2,0(T3)		;GET PREVIOUS RESULT
	AND	T2,T1			;DO IT
	HRLM	T2,0(T3)		;PUT AWAY NEW ANS
	HRRZ	T2,0(T3)
	IOR	T2,T1			;DO IT AGAIN
	HRRM	T2,0(T3)		;PUT AWAY NEW OR
	
EPEL.1:	SKIPN	T4			;WORK ON RH?
	 POPJ	P,0			;NO GO BACK
	HRRZ	T1,P1			;GET RH ALONE
	HLRZ	T2,0(T4)			;GET OLD ANS
	AND	T2,T1			;AGAIN
	HRLM	T2,0(T4)		;PUT IT BACK
	HRRZ	T2,0(T4)			;GET OLD OR
	IOR	T2,T1			; LAST TIME
	HRRM	T2,0(T4)		;PUT IT AWAY
	POPJ	P,0			;RETURN TO CALLER
	;MDELST--	ROUTINES TO DO MOST OF THE WORK TO LIST
	;CODE 11 ENTRIES, MASSBUS DEVICE ERRORS.
	;DEVICE TYPE WORD IS IN P2 WHEN WE GET HERE
	;CALLED VIA PUSHJ FROM PROCSA RETURNS POPJ SEVERAL
	;PAGES FROM HERE.

MDE000:	SIXBIT/RS04/
	SIXBIT/TU16/
	SIXBIT/RP04/
	SIXBIT/RP05/
	SIXBIT/RP06/

MDELST:	SETZB	T2,MDEDTP
	HRRZ	T1,P2			;GET TYPE ALONE
	ANDI	T1,77			;STRIP IT OFF
	TRNE	T1,2			;RS04?
	MOVEI	T2,0			;SAY SO
	TRNE	T1,20			;RP04?
	MOVEI	T2,2			;SAY SO
	CAIN	T1,21			;RP05?
	 MOVEI	T2,3			;YES
	CAIN	T1,22		;RP06?[310]
	 MOVEI	T2,4		;YES
	SKIPN	,T2		;ANYTHING THERE? EDIT 142
	 PUSHJ	P,MDEXX1		;NO-GO LOOK AT DEVICE NAMES
	MOVEM	T2,MDEDTP		;AND SAVE IT (POOR GUY REALLY
					;GET SHOVED AROUND!)
	TYPEIT	<
	UNIT TYPE:	>
	MOVE T1,MDEDTP			;GET TYPE BACK
	MOVE	T1,MDE000(T1)		;GET IT IN SIXBIT
	PUSHJ	P,.TSIXN
	MOVS	P1,WKBUFF+MDEDSN	;GET SER # WORD
	SKIPN	P1		;ANYTHING THERE?
	JRST	MDE001			;GO AROUND
	TYPEIT	<
	UNIT SERIAL #:	>
	HLRZ	T1,P1
	ANDI	T1,170000		;GET MSD
	LSH	T1,-14			;SHOVE IT DOWN
	PUSHJ	P,.TDECW		;OUTPUT IT
	HLRZ	T1,P1
	ANDI	T1,07400		;GET NEXT DIGIT
	LSH	T1,-10
	PUSHJ	P,.TDECW
	HLRZ	T1,P1			;GET NEXT DIGIT
	ANDI	T1,00360		;MASK IT OFF
	LSH	T1,-4
	PUSHJ	P,.TDECW		;OUTPUT IT
	HLRZ	T1,P1			;GET LSD
	ANDI	T1,0017			;STRIP
	PUSHJ	P,.TDECW
	TYPEIT	<.>
MDE001:	TYPEIT	<
	MEDIA ID:	>
	MOVE	T1,WKBUFF+MDEMID		;THAT'S WHERE IT SHOULD BE
	PUSHJ	P,.TSIXN			;IN SIXBIT
	MOVE	T1,MDEDTP			;IS THIS A MAGTAPE?
	CAIN	T1,1
	  JRST 	MDE002				;YES
	TYPEIT	<
	STR ID:		>
	MOVE 	T1,WKBUFF+MDESTR		;GO GET IT
	PUSHJ	P,.TSIXN
	JRST	MDE003				;GO AROUND MAGTAPE
MDE002:	TYPEIT	<
	USER'S ID:	>
	MOVE	T1,WKBUFF+MDEUID		;
	PUSHJ	P,.TPPNW			;
	;HERE TO OUTPUT FAILURE LOCATION

MDE003:	MOVE T1,MDEDTP				;GET DEV TYPE BACK
	CAIN	T1,1				;MAGTAPE?
	  JRST MDE007				;YUP
	
;HERE FOR LBN (RP04 OR RS04)
	TYPEIT	<
	LBN:		>
	MOVE 	T1,WKBUFF+MDELOC		;GET LBN
	PUSHJ	P,.TDECW			;TYPE IN DECIMAL
	TYPEIT	<.  =
	>
	MOVE T1,MDEDTP				;GET TYPE AGAIN
	SKIPN	T1	;RS04?
	  JRST	MDE004				;YES
	SETZ	P2,
	CAIN	T1,2		;RP04?
	 HRRZI	P2,5	;SAY SO
	CAIN	T1,3	;RP05?
	 HRRZI	P2,6		;SET INDEX TO POINT AT RP05
	CAIN	T1,4		;RP06?[310]
	 HRRZI	P2,7	;SAY SO
	MOVE	P3,WKBUFF+MDELOC
	CAMGE	P3,.MXBLK(P2)			;[144]1ST UNIT OF STR?
	 JRST	MDE005				;OK
	SUB	P3,.MXBLK(P2)			;- 1 UNITS WORTH
	JRST	.-3				;AND TRY AGAIN
MDE005:	TYPEIT	<CYL:   >
	IDIV	P3,.TRBLK(P2)			;GET CYL #
	MOVE	T1,P3
	PUSHJ	P,.ODECW			;SAY IT IN DECIMAL
	MOVE	P3,P4				;REMAINDER
	TYPEIT	<	SURF:   >
	IDIV	P3,.SUBLK(P2)			;SURFACE #
	MOVE	T1,P3
	PUSHJ	P,.ODECW			;AGAIN WITH ".".
	TYPEIT	<	SECT:   >
	MOVE	P3,P4				;REMAINDER
	IMUL	P3,.SECBK(P2)			;X BLOCKS/SECTOR
	MOVE	T1,P3
	PUSHJ	P,.ODECW
	JRST	MDE010				;GO AROUND MAGTAPE
	;HERE FOR LBN FOR RS04

MDE004:	MOVE	P3,WKBUFF+MDELOC		;GET LBN
	CAMGE	P3,.MXBLK+4			;[144]1ST UNIT IN STR?
	 JRST	MDE006				;YES-OK
	SUB	P3,.MXBLK+4			;-1 UNITS WORTH
	JRST	.-3				;TRY AGAIN
MDE006:	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	MDE010				;GO AROUND MAGTAPE

	;HERE FOR MAGTAPE FAILURE LOCATION
MDE007:	TYPEIT	<	LOCATION:    RECORD  #  >
	HLRZ	T1,WKBUFF+MDELOC
	PUSHJ	P,.ODECW
	TYPEIT	<    OF FILE #  >
	HRRZ	T1,WKBUFF+MDELOC
	PUSHJ	P,.ODECW
	
;HERE AFTER DUMPING FAILURE LOCATION - NOW TO DUMP
	;OPERATION ISSUED TO DEVICE
MDE010:	TYPEIT	<
	OPERATION AT ERROR:	>
	HRLZ	T1,WKBUFF+MDEICR	;GET ISSUED CONTROL REG.
	MOVE	T2,MDEDTP		;SETUPINDEX
	PUSHJ	P,@MDE011(T2)		; LET ROUTINE DO WORK

	;HERE TO DUMP USER'S INFORMATION
	TYPEIT	<
	USER'S ID:	>
	MOVE	T1,WKBUFF+MDEUID	;
	PUSHJ	P,.TPPNW
	MOVEI	P1,[ASCIZ/
	USER'S PGM:	/]
	MOVE	P2,WKBUFF+MDEPGM
	PUSHJ	P,.SIXBT
	MOVEI	T1,[ASCIZ/
	USER'S	FILE:	/]
	PUSHJ	P,.TSTRG
	MOVE	T1,WKBUFF+MDEFIL
	HLRZ	T2,WKBUFF+MDEEXT	;GET EXTENSION
	CAIN	T2,'UFD'		;UFD'S GET DIFFERENT TREATMENT
	 PUSHJ	P,[PUSHJ	P,.TPPNW
		   AOS		0(P)
		   POPJ		P,0]
	PUSHJ	P,.TSIXN
	MOVEI	P1,[ASCIZ/./]
	HLLZ	P2,WKBUFF+MDEEXT	;ONCE MORE
	PUSHJ	P,.SIXBT
	;HERE TO OUTPUT BASIC TRANSLATION OF CONI OR SOFTWARE ERROR
	;IF SOFTWARE ERROR (RIB ETC) S HAS BEEN SET UP AS A DUMMY
	;CONI WORD BY BIT CHECKING AND SUM ROUTINES.
	;MODIFIED BY EDIT 142 TO CHECK FOR SOFTWARE ERROR FIRST
	;AND DONT LIST MUCH IF IT WAS AS CONI,DATAI
	;ETC MAY BE MISLEADING(FROM PREVIOUS ERROR)
	;MODIFIED WITH EDIT 313 FOR RH20

	TYPEIT	<
	ERROR:	>
	MOVE	P3,MASKON	;CONTROLLER OFFSET, 4=RH10,5=RH20
	MOVEM	P3,KONTYP		;AND STORE IT
	;ADDED WITH [551]
	MOVEI T1,RH2HDR		;ASSUME AN RH20
	CAIE	P3,5		;IS IT??
	 MOVEI	T1,RH1HDR	;NO,CHANGE
	SETOM	@T1		;FLAG THAT WE SAW ONE OR THE OTHER
	;END [551]
	MOVE	P2,WKBUFF+MDECNI	;GET CONI AT ERROR
	MOVE	P4,KONMSK(P3)		;AND MASK
	TDNN	P2,P4			;ANY ERROR BITS ON?
	 JRST	MDE013			;NO-MUST BE SOFTWARE
	MOVE	P2,WKBUFF+MDETYP	;GET DEVICE TYPE
	TLNE	P2,ERRHRD		;HARD ERROR?
	 MOVEI	T1,[ASCIZ/NON-RECOVERABLE /]
	TLNN	P2,ERRHRD		;TRY AGAIN
	 MOVEI	T1,[ASCIZ/RECOVERABLE /]	;NOW T1 IS SETUP FOR EITHER
	PUSHJ	P,.TSTRG		;SAY IT IN ASCIZ
	HLRZ	T1,P2			;GET CONTROLLER TYPE
	TRNN	T1,10			;RH10?
	 JRST	MDE012			;NOPE
	MOVEI	P3,4			;YUP - SETUP RH10INDEX
	MOVEM	P3,KONTYP		;AND STORE IT
	MOVE	P2,WKBUFF+MDECNI	;GET CONI AT ERROR
	MOVE	P4,KONMSK(P3)		;AND MASK
	AND	P2,P4			;YES GET ERROR BITS ALONE
	LSH	P2,@MINERB(P3)		;MOVE THEM OVER
	HRRZI	P4,RH10DV		;FINISH SETUP
	PUSHJ	P,JFLOOP		;GO DO TRANSLATION
	JRST	MDE014			;GO AROUND RH20 & SOFTWARE
MDE012:	MOVEI	P3,5		;SETUP
	MOVEM	P3,KONTYP		;STORE IT
	MOVE	P2,WKBUFF+MDECNI	;GET ERROR CONI
	MOVE	P4,KONMSK(P3)		;GET MASK
	AND	P2,P4			;ERROR BITS ALONE
	LSH	P2,@MINERB(P3)		;MOVE THEM OVER
	HRRZI	P4,RH20DV		; SETUP TABLE ADDR
	PUSHJ	P,JFLOOP		;HE'LL DOTHE WORK
	JRST	MDE014			;GO AROUND SOFTWARE
	;HERE TO SCREAM ABOUT SOFTWARE DET ERROR
MDE013:	SKIPN	S		;ANY SOFTWARE DETECTED ERRORS?
	 JRST	MDE13C		;NO-CHECK FOR OFFLINE'S
	TYPEIT	< NON-RECOVERABLE SOFTWARE DETECTED  >
	MOVEI	T1,2			;SOFTWARE INDEX
	MOVEM	T1,KONTYP
	MOVE	P2,S			;DUMMY CONI WORD
	LSH	P2,@MINERB(T1)		;MOVE OVER
	MOVE	P4,DEVTYP(T1)		;TABLE ADDR
	PUSHJ	P,JFLOOP
	JRST	MDE14A		;
;HERE COMPARE DEV NAME BECAUSE NO DRIVE TYPE
MDEXX1:	LDB	T3,[POINT 12,WKBUFF+MDENAM,11]
	CAIN	T3,6260		;RPX?
	 MOVEI	T2,2		;YES, RP04
	CAIN	T3,4663		;FSX?
	 MOVEI	T2,0		;YES, RS04
	POPJ	P,0
;END EDIT 142


	;[152]
MD013A:	TYPEIT	<    ***** EITHER MOL OR DRY OR BOTH BITS ARE OFF
		IN DEVICE STATUS REG *****>
	JRST	MDE014			;KEEP ON LISTING
MDE13C:	HRRZ	P2,WKBUFF+MDEDSR	;[152]GET DEVICE STATUR REG
	TRNE	P2,1B23			;EITHER MOL OR DRY
	TRNN	P2,1B28
	 JRST	MD013A			;IS OFF
	JRST	MDE014		;NONE-CONTINUE
	;CODE ADDED WITH EDIT 122

MDE014:	TYPEIT	< IN CONTROLLER CONI
		>
	HRLZ	P1,WKBUFF+MDEDER	;GET DEV ERROR REG
	MOVE	T1,MDEDTP		;AND DEV TYPE
	MOVEI	T2,21		;ASSUME RP04,5,OR6
	SKIPN	T1		;BUT CHECK
	 MOVEI	T2,25		;FOR RS04
	MOVEM	T2,KONTYP	;FINISH SETUP
	PUSHJ	P,CNIDCD	;TRANSLATE DEV ERROR REGISTER TOO
	TYPEIT	< IN DEVICE ERROR REGISTER>
	;END [326]
MDE14A:	LDB	P1,[POINT 9,WKBUFF+MDECCT,17]	;GET BAT SLOTS
	TYPEIT	<
	REMAINING ENTRIES IN
	UNIT'S BAT BLOCK:	>
	MOVE	T1,P1
	CAIN	T1,777		;UNKNOWN?
	 JRST 	MDE13A		;YES
	PUSHJ	P,.ODECW	;SAY IT IN DECIMAL
	JRST	MDE13B		;GO AROUND
MDE13A:	TYPEIT	<UNKNOWN>

	;HERE TO DUMP RETRIES AND CONTROLLER INFORMATION
MDE13B:	TYPEIT	<
	RETRY COUNT:	>
	HRRZ	T1,WKBUFF+	MDETYP	;GET RETRY COUNT
	PUSHJ	P,.ODECW		;TYPE # & .
	PUSH	P,P1
	SETZ	P1,
	PUSHJ	P,DETCHK	;/DETAIL??
	POP	P,P1
	TYPEIT	<
CONTROLLER INFORMATION:
	CONTROLLER:	>
	MOVE	P4,WKBUFF+MDETYP	;[552]GET TYPE
	HLRZ	T2,P4
	TRNN	T2,10			;RH10?
	 MOVEI	T1,[ASCIZ/ RH20/]	;NO
	TRNE	T2,10
	 MOVEI	T1,[ASCIZ/ RH10/]	;YES
	PUSHJ	P,.TSTRG		;TYPE EITHER
	TYPEIT	<  #>
	HLRZ	T1,P4
	ANDI	T1,7			;GET CONTROLLER #
	PUSHJ	P,.TOCTW		;TYPE IT TOO
	TYPEIT	<
	CONI AT ERROR:	>
	HRRZ	T1,WKBUFF+MDECNI	;GET ERROR CONI
	PUSHJ	P,.TXWDW		;IN HALF WORD
	TYPEIT	< = >
	TLNN	P4,10			;RH10?
	 MOVEI	T1,5			;NO
	TLNE	P4,10
	MOVEI 	T1,4			;YES
	MOVEM	T1,KONTYP
	MOVE	P1,WKBUFF+MDECNI
	TDNN	P1,KONMSK(T1)		;ANY ERROR BITS?
	 JRST	MDE015			;NO
	PUSHJ	P,CNIDCD		;YES GO TRANSLATE
	JRST	MDE016			;GO AROUND
MDE015:	TYPEIT	< NO ERROR BITS DETECTED>
MDE016:	TYPEIT	<
	CONI AT END:	>
	HRRZ	T1,WKBUFF+MDECNF
	PUSHJ	P,.TXWDW
	TYPEIT	< = >
	MOVE	P1,WKBUFF+MDECNF
	MOVE	T2,KONTYP
	TDNN	P1,KONMSK(T2)		;ANY ERRORS
	 JRST	MDE017		;NO
	PUSHJ	P,CNIDCD
	JRST	MDE17A		;GO AROUND
MDE017:	TYPEIT	< NO ERROR BITS DETECTED>

	;HERE TO DUMP DATAI'S
MDE17A:	MOVE	T1,KONTYP	;GET KONTROLLER TYPE
	PUSH	P,T1		;SAVE KONTYP
	CAIN	T1,4		;RH20?
	 JRST 	MDE020	;NO, DON'T LIST CHN STATUS
	TYPEIT	<
	  CHN STATUS AT ERROR:	>
	HLLZ	T1,WKBUFF+MDECNI
	MOVE P1,T1
	PUSHJ	P,.TXWDW
	TYPEIT	< = >
	MOVEI	T1,13		;OFFSET IN SYSERB TO RHSW VALUES
	MOVEM	T1, KONTYP
	PUSHJ	P,CNIDCD
	TYPEIT	<
	  CHN STATUS AT END:	>
	HLLZ	T1,WKBUFF+MDECNF
	MOVE P1,T1
	PUSHJ	P,.TXWDW
	TYPEIT	< = >
	PUSHJ	P,CNIDCD
MDE020:	POP	P,T1		;GET KONTYP BACK
	MOVEM 	T1,KONTYP
	TYPEIT	<
	DATAI >
	MOVE	P2,KONTYP		;GET CONTROLLER TYPE
	TRNE	P2,1			;RH10=4,RH20=5
	 MOVEI	P4,[ASCIZ/PTCR/]
	TRNN	P2,1
	 MOVEI	P4,[ASCIZ/RHCR/]
	MOVE	T1,P4
	PUSHJ	P,.TSTRG		;FINISH TYPING DATAI NAME
	TYPEIT	< AT ERROR:	>
	MOVE	T1,WKBUFF+MDEDTI
	PUSHJ	P,.TXWDW		;TYPE IN HALF WORD
	TYPEIT	<
	DATAI >
	MOVE	T1,P4			;WE SAVED IT BEFORE
	PUSHJ	P,.TSTRG
	TYPEIT	< AT END:	>
	MOVE	T1,WKBUFF+MDEDTF
	PUSHJ	P,.TXWDW
	TYPEIT	<
	DATAI >
	TRNE	P2,1			;WE SAVED THIS TOO
	 MOVEI	P4,[ASCIZ/PBAR/]	;FOR RH20
	TRNN	P2,1
	 MOVEI	P4,[ASCIZ/RHDB/]	;FOR RH10
	MOVE	T1,P4
	PUSHJ	P,.TSTRG
	TYPEIT	< AT ERROR:	>	;FINISH 
	MOVE	T1,WKBUFF+MDE2DT	;GET SECOND DATAI WORD
	PUSHJ	P,.TXWDW
	TYPEIT	<
	DATAI >
	MOVE	T1,P4			;GET REG NAME BACK
	PUSHJ	P,.TSTRG	
	TYPEIT	< AT END:	>
	MOVE	T1,WKBUFF+MDE2DF
	PUSHJ	P,.TXWDW
;SETUP AND CALL ROUTINES TO DUMP 16 DEVICE REGISTERS

;	HRRZ	T1,WKBUFF+MDECNI	;GET CONI EDIT 135
;	MOVEI	T2,4			;OFFSET FOR RH10
;	TDNN	T1,KONMSK(T2)		;IF NO ERROR BITS DON'T LIST 
;	SKIPE	S		;IF NON-ZERO-NO MORE LISTINGS
;	 POPJ	P,0			;DON'T LIST DEVICE REGS.
;	TLNN	F,F.DET			;EDIT 116-DID USER SAY /DETAIL?
;	 PJRST	TAPL11			;NO-DON'T DO ANY MORE.
	TYPEIT	<
DEVICE REGISTER INFORMATION:
		AT ERROR	AT END		DIFF.		TEXT
>
	MOVE	P1,[XWD 1,20]		;SETUP P1 FOR MODE 1 AND 20 ITEMS
	HRLZI	P2,MASREG			;STARTING ADDR OF TABLE
						;OF SIXBIT REG NAMES
	MOVE	T1,MDEDTP			;GET DEVICE TYPE
	HRR	P2,MSCNTL(T1)		;SETUP P2
	MOVE	P3,[XWD MDEDCR,MDEDCR]	;WHERE TO FIND WORDS.
	PUSHJ	P,HWDUMP			;IF ALL GOES WELL
	PUSHJ	P,TITLST	;EDIT 116 START ON NEXT PAGE
	POPJ	P,0		;WE'RE DONE!
	;SOME TABLES AND ROUTINES USED WITH MASBUSS ENTRIES
	;FIRST THE TABLE OF SIXBIT REGISTER NAMES
	;CHANGED TO FIT TRAINING'S REQUIREMENTS WITH VER 3C.
MASREG:	SIXBIT/CR(00)/
	SIXBIT/SR(01)/
	SIXBIT/ER(02)/
	SIXBIT/MR(03)/
	SIXBIT/AS(04)/
	SIXBIT/DA(05)/
	SIXBIT/DT(06)/
	SIXBIT/LA(07)/
	SIXBIT/SN(10)/
	SIXBIT/OF(11)/
	SIXBIT/DC(12)/
	SIXBIT/CC(13)/
	SIXBIT/E2(14)/
	SIXBIT/E3(15)/
	SIXBIT/EP(16)/
	SIXBIT/PL(17)/

	;NOW THE CONTROL TABLE ADDRESSES

MSCNTL:	XWD	0,RS04CT
	XWD	0,TU16CT
	XWD	0,RP04CT
	XWD	0,RP05CT
	XWD	0,RP05CT

	;SIXBIT REGISTER NAMES FOR TU16
TU6REG:	SIXBIT/CR(00)/
	SIXBIT/SR(01)/
	SIXBIT/ER(02)/
	SIXBIT/MR(03)/
	SIXBIT/AS(04)/
	SIXBIT/FC(05)/
	SIXBIT/DT(06)/
	SIXBIT/CK(07)/
	SIXBIT/SN(10)/
	SIXBIT/TC(11)/


	;TAPLst--routine to list code 21 entries.
	;	called with TAPtry in p2.

TAPLst:	HLRZ	P1,P2
	ANDI	P1,70	;GET CONTROLLER TYPE
	LSH	P1,-3	;MOVED OVER
	TLNE	P2,(1B11)	;[415]IS CONTROLLER AN RH20?
	 AOS	P1		;YES ADD ONE TO TYPE 4=RH10,5=RH20
	MOVEM	P1,TAPKON	;SAVE IT
	CAIGE	P1,3	;DX10OR TM02?
	 JRST	TAPL01	;NO-NO UNIT TYPE OR S/N
	CAIE	P1,3	;DX10?
	 JRST	TAPLSA	;TM02
	typeit	<
	UNIT TYPE:	>
	HRRZ	P2,WKBUFF+TAPIEP
	SUB	P2,HEADWC
	ADDI	P2,WKBUFF		;OFFSET TO ERROR BLOCK
	MOVE	P1,XS.S4(P2)		;SENSE BYTES 4-7
	MOVEI	T1,[ASCIZ/TU70/]
	LDB	P3,[POINT 4,P1,23]	;GET TU MODEL
	CAIN	P3,14			;TU72-E?
	 MOVEI	T1,[ASCIZ/TU72-E/]	;YES
	PUSHJ	P,.TSTRG
;NOW CHECK FOR S/N
	CAIE	P3,14			;TU72?
	 JRST	TAPL01			;NOPE
	TYPEIT	<
	UNIT SERIAL #:	>
	MOVE	P3,XS.S12(P2)		;GET HI UNIT S/N
	LDB	T2,[POINT ^D8,P3,31]
	MOVEI	P1,0
	DPB	T1,[POINT ^D8,P1,23]
	MOVE	P3,XS.S16(P2)		;GET LO UNIT S/N
	LDB	T1,[POINT ^D8,P3,7]
	DPB	T2,[POINT ^D8,T1,27]	;MOVE IN HIGH ORDER
	PUSHJ	P,.ODECW
	JRST	TAPL01			;NOW CONTINUE

	;HERE DUMP UNIT TYPE AND SERIAL NUMBER FOR TU16&TU45
TAPLSA:	HRRZ	P2,WKBUFF+TAPIEP	;GET POINTER TO AT ERROR BLOCK
	SUB	P2,HEADWC	;WORDS IN HEADER
	ADDI	P2,WKBUFF	;P2 IS A GOODINDEXPOINTER
	TYPEIT	<
	UNIT TYPE:	>
	HRRZ	T2,T2.DDT(P2)	;GET UNIT TYPE REG
	ANDI	T2,77		;STRIP OF UNNEEDED BITS
	MOVE	T1,[SIXBIT/TU16/]	;ASSUME TU16
	CAIN	T2,12	;BUT CHECK
	MOVE	T1,[SIXBIT/TU45/]
	PUSHJ	P,.TSIXN	;LIST EITHER
	TYPEIT	<
	UNIT SERIAL #:	>
	HRRZ	P1,T2.DSN(P2)	;GET UNIT SERIAL NUMBER
	HRRZ	T1,P1
	ANDI	T1,170000
	LSH	T1,-14		;MSD MOVED DOWN
	PUSHJ	P,.TDECW	;IN DECIMAL
	HRRZ	T1,P1
	ANDI	T1,7400
	LSH	T1,-10		;NEXT DIGIT MOVED DOWN
	PUSHJ	P,.TDECW
	HRRZ	T1,P1
	ANDI	T1,360
	LSH	T1,-4
	PUSHJ	P,.TDECW
	HRRZ	T1,P1
	ANDI	T1,17
	PUSHJ	P,.TDECW	;NOW DO LSD
	TYPEIT	<.>
	JRST	TAPL01	;THEN CONTINUE

TAPL01:	SKIPG	WKBUFF+TAPUID	;REAL UNIT ID ?  [746]
	 JRST	TAPL1A		;NO! - SKIP TESTS
	TYPEIT	<
	USER'S ID:	>	;[701-RLD]
	MOVE	T1,WKBUFF+TAPUID ;GET HIS/HER P,PN
	PUSHJ	P,.PPNWW	;LISTED
	TYPEIT	<
	USER'S PROGRAM:	>
	MOVE	T1,WKBUFF+TAPPGM ;AND PROGRAM NAME
	PUSHJ	P,.TSIXN	;IN SIXBIT
	;END [701-RLD]
TAPL1A:	TYPEIT	<
	MEDIA	ID:	>
	move	t1,wkbuff+TAPrid	;get reelid
	pushj	p,.tsixn
	typeit	<
	LOCATION
	 OF FAILURE:	RECORD:  >
	move	t1,WKBUFF+TAPrec
	pushj	p,.odecw
	typeit	<  OF FILE:  >
	move	t1,wkbuff+TAPfil
	ADDi	t1,1		;correct again
	pushj	p,.odecw
	TYPEIT	<
	POSITION
	BEFORE ERROR:   RECORD:  >
	HRRZ	T1,WKBUFF+TAPPBE	;# RECORDS
	PUSHJ	P,.ODECW
	TYPEIT	<  OF FILE:  >
	HLRZ	T1,WKBUFF+TAPPBE	;# FILES
	ADDI		T1,1		;CORRECT TO GET CURRENT FILE
	PUSHJ	P,.ODECW
	TYPEIT	<
	CHAR. INTO RECORD:  >
	MOVE	T1,WKBUFF+TAPCCR
	PUSHJ	P,.ODECW


	;here we decode last transfer command

	typeit	<
	OPERATION:	>
	MOVE	T1,TAPKON	;GET CONTROLLER
	CAIN	T1,2		;TC10?
	 JRST	TC1CMD		;YUP
	CAIE	T1,5		;TM02 ON R20?
	CAIN	T1,4		;TM02?
	 JRST	TM2CMD		;DECODE TM02 COMMAND,ETC
	CAIE	T1,3		;DX10?
	 JRST	TM1CMD		;MUST BE TM10
	HRRZ	P2,WKBUFF+TAPIEP	;GET ERROR POINTER
	SUB	P2,HEADWC
	ADDI	P2,WKBUFF		;POINTER TO DX TERMINATION AREA
	move	p1,XS.CM1(P2)	;check last first
	tlne	p1,1b18			;bit 0=0?
	 jrst	TAPL02			;no try next
	tlnn	p1,1b19			;ok now bit 1
	 jrst	TAPL02			;nope
	jrst	TAPL06			;found it!!
TAPL02:	move	p1,XS.CMD(P2)
	tlne	p1,1b18
	 jrst	TAPL05
	tlnn	p1,1b19
	 jrst	TAPL05
	jrst	TAPL06
;unknown command
TAPL05:	typeit	<UNKNOWN,>
	jrst	TAPL07		;go around

;here when last cmd found, cmd in p1

TAPL06:	tlne	p1,1b20		;ignore length?
	 pushj	p,TAPLx1
	tlne	p1,1b21		;stat inh?
	 pushj	p,TAPLx2
	tlne	p1,1b22		;immediate
	 pushj	p,TAPLx3
	hlrz	t1,p1
	andi	t1,140000	;get data mode bits
	lsh	t1,-^d14	;moved over
	move	t1,TAPLx4(t1)	;asciz addr
	pushj	p,.tstrg
	TYPEIT	<  DEV.CMD.:   >	
	MOVEI	T2,[ASCIZ/ILLEGAL/]	;SET FOR DEFAULT
	move	t4,p1
	and	t4,[3770000]	;get device cmd
	lsh	t4,-^d12	;moved a bit
	skipn	t4
	 movei	t2,[asciz/TEST IO/]
	MOVE	T1,T4
	ANDI	T1,7		;SAVE ONLY LSD
	CAIE	T1,3		;END IN 3?
	 JRST	TAPL6A		;NO-GO AROUND
	MOVEI	T2,[ASCIZ/7 TRK MODE SET/]
	CAIL	T4,300	;T4<300?
	 MOVEI	T2,[ASCIZ/9TRK MODE SET/]	;T4 IS > 300
	CAIN	T4,03
	 movei	t2,[aSciz/NO OP/]
	cain	t4,13
	 movei	t2,[asciz/SET DIAG./]

;HERE START LOOKING FOR VALID COMMAND
;IF ALL COMPARES FAIL "ILLEGAL IS PRINTED
TAPL6A:	cain	t4,01
	 movei	t2,[asciz/WRITE/]
	cain	t4,02
	 movei	t2,[asciz/READ/]
	cain	t4,04
	 movei	t2,[asciz/SENSE/]
	cain	t4,33
	 movei	t2,[asciz/REQ.TRK.IN ERR/]
	cain	t4,14
	 movei	t2,[asciz/READ BACKWARD/]
	cain	t4,213
	 movei	t2,[asciz/LOOP WRITE TO READ/]
	cain	t4,324
	 movei	t2,[asciz/SENSE RELEASE/]
	cain	t4,364
	 movei	t2,[asciz/SENSE RESERVE/]
	cain	t4,07
	 movei	t2,[asciz/REWIND/]
	cain	t4,017
	 movei	t2,[asciz/UNLOAD/]
	cain	t4,27
	 movei	t2,[asciz/ERASE GAP/]
	cain	t4,37
	 movei	t2,[asciz/WRITE TAPE MARK/]
	cain	t4,47
	 movei	t2,[asciz/BACKSPACE BLOCK/]
	cain	t4,57
	 movei	t2,[asciz/BACKSPACE FILE/]
	cain	t4,67
	 movei	t2,[asciz/SPACE BLOCK/]
	cain	t4,77
	 movei	t2,[asciz/SPACE FILE/]
	cain	t4,227
	 movei	t2,[asciz/DATA SEC. ERASE/]
	move	t1,t2		;something is in t2
	pushj	p,.tstrg
	jrst	TAPL07		;to dump status

TAPLx1:	typeit	<ILE, >
	popj	p,0

TAPLx2:	typeit	<S.I., >
	popj	p,0

TAPLx3:	typeit	<IMM, >
	popj	p,0


TAPLx4:[asciz/CORE DUMP,/]
	[asciz/BYTE,/]
	[asciz/ASCII,/]
	[asciz/SIXBIT,/]



;	here talk about status etc

TAPL07:	typeit	<
	STATUS:  CU IS:  >
	hrrz	p4,wkbuff+TAPiep	;error pointer
	sub	p4,headwc
	addi	p4,wkbuff
	MOVEI	T1,[ASCIZ/TX01,/]
	MOVE	T2,XS.S8(P4)
	TLNE	T2,1B30			;TX01?
	 MOVEI	T1,[ASCIZ/TX02,/]
	PUSHJ	P,.TSTRG
	move	t3,xs.S12(p4)		;sense bytes 12-15 at error
	and	t3,[1400000000]		;c.u. features
	movss	,T3
	lsh		t3,-^d8
	setz	t1,
	cain	t3,00
	 movei	t1,[asciz/9TRK PE,/]
	cain	t3,01
	 movei	t1,[asciz/7TRK NRZI/]
	cain	t3,02
	 movei	t1,[asciz/9TRK NRZI/]
	cain	t3,03
	 movei	t1,[asciz/7 & 9 TRK NRZI/]
	pushj	p,.tstrg
	move	t3,xs.s0(p4)	;offset should still be it p4
	typeit	< DEVICE IS:   WRITE >
	move	t1,[sixbit/ENB/]
	tlne	t3,4		;better check
	 move	t1,[sixbit/LOCKED/]
	pushj	p,.tsixn
	MOVE	T1,XS.S8(P4)
	TLNN	T1,1B30		;TX02?
	 JRST	TAPL7A		;NO
	TYPEIT	<
	TX02 SERIAL #:	>
	MOVE	P3,XS.S12(P4)	;GET HI ORDER SN
	MOVEI	P1,0
	LDB	T1,[POINT ^D14,P3,23]
	PUSHJ	P,.ODECW

	;now for error

TAPL7A:	TYPEIT	<
	ERROR:	>
	MOVEI	T1,[ASCIZ/NON-RECOVERABLE /]
	move	t2,wkbuff+TAPtry
	tlnn	t2,errhrd	;hard or soft?
	 movei	t1,[asciz/RECOVER