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