Trailing-Edge
-
PDP-10 Archives
-
bb-d868a-bm
-
3-sources/syserd.mac
There are 16 other files named syserd.mac in the archive. Click here to see a list.
TITLE SYSERD -- SYSTEM ERROR FILE PROCESSOR -- MAINLINE CODE
SUBTTL VERSION 11(614) K. COYE/ RLD/ PJB/ ES
;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
DUM160
DUM161
DUM162 ; [614]
>
;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 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
;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
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: 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
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
TLZ F,F.BTCK ;CLEAR EXAMINE ENTRY FLAG
TRNE F,F.SEQ ;[532]SAID /SEQ?
JRST START1 ;YES,FORCE LISTING
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: >
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
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
PJRST TITLST ;LEAVE NOW
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
PUSHJ P,TITLST ;START ON NEXT PAGE
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
MOVEM T1,KONTYP
PUSHJ P,CNIDCD ;GO TRANSLATE
;NOW FOR ERA
TYPEIT <
ERA: >
MOVE P1,WKBUFF+PI%ERA
MOVE T1,P1
PUSHJ P,.TXWDW
TYPEIT < = WD #>
LDB T1,[POINT 2,P1,1] ;GET WORD #
PUSHJ P,.TOCTW
PUSHJ P,.TSPAC
TLNE P1,1B20 ;SWEEP?
PUSHJ P,[TYPEIT <, SWEEP REF, >
POPJ P,0]
TLNE P1,1B21 ;CHAN?
PUSHJ P,[TYPEIT <, CHAN REF, >
POPJ P,0]
LDB T2,[POINT 3,P1,6] ;GET DATA SOURCE & WRITE BIT
MOVE T1,ERAMES(T2) ;ADDR OF SOME ASCIZ
PUSHJ P,.TSTRG
;NOW FOR MEM ADDR
TYPEIT <
BASE PHY. MEM ADDR.
AT FAILURE: >
LDB T1,[POINT 22,P1,35] ;22 BITS OF ADDR
PUSHJ P,.TOCTW ;NOT HALF WORD
PUSHJ P,.TCRLF
POPJ P,0
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
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
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
;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/]
;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,.ODECW ;WITH A .
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 ;MUST BE DEV HUNG.
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
;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 < = >
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,>
SKIPE P2
JRST .+3
TYPEIT <NONE>
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/TU70/ ;RP07???
SIXBIT/DX20/ ;RP08???
SIXBIT/RM03/ ; [601]
SIXBIT/TM03/
SIXBIT/TU77/
SIXBIT/TM78/
SIXBIT/TU78/
;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 #
MOVEI T1,WKBUFF+MB%REG+10 ;LOCATION FOR RP04
MOVS P1,0(T1) ;GET THE S/N
SKIPN P1 ;ANYTHING THERE?
POPJ P,0 ;NO-LEAVE NOW
TYPEIT <
UNIT SERIAL #: >
HLRZ T1,P1 ;4 BCD DIGITS RIGHT JUSTIFIED
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 <.>
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
CAIE T1,7 ;TU70?
POPJ P,0 ;NO! - LEAVE
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/TX01 #: >
HRRZ T1,WKBUFF+DX%UAD ;GET LOGICAL ADDRESS
PUSHJ P,.TOCTW ;LIST IN OCTAL
;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 ;FINISH SETUP
PUSHJ P,.TXWDW ;IN HALF WORD FORMAT
TYPEIT < = >
PUSHJ P,CNIDCD ;GO DECODE
TYPEIT <
CONI AT END: >
MOVE T1,WKBUFF+DX%CIF
MOVE P1,T1
PUSHJ P,.TXWDW
TYPEIT < = >
PUSHJ P,CNIDCD
POPJ P,0 ;BACK TO PROCSD
;END EDIT [510]
;HERE LIST CHANNEL STATUS,MASSBUS INFO AND A WHOLE
;LOT OF DEVICE INFO.
DX%003: PUSHJ P,CHNSTS ;LIST CHANNEL TYPE, ETC
;NOW LIST MASSBUS REGISTER VALUES
TYPEIT <
MASSBUS REGISTER INFORMATION:
AT ERROR AT END DIFF. TEXT
>
MOVE P1,[XWD 1,7] ;MODE 1,7 ITEMS TO LIST
MOVE P2,[XWD DX2REG,DX20CT] ;TABLE OF REGISTER NAMES,,CONTROL
;TABLE ADDRESSES
HRRZ P3,WKBUFF+DX%MBR ;GET OFFSET TO BLOCK OF DATA
HRL P3,P3 ;AT END & AT ERROR ARE AT SAME PLACE
PUSHJ P,HWDUMP ;GO DO THE LISTING
MOVE P1,[XWD 1,20] ;NOW DO SECOND HALF
MOVE P2,[XWD DX2RG1,DX20C1] ;ADJUSTED CONTROL TABLES
HRRZ P3,WKBUFF+DX%MBR ;WHERE TO START
ADDI P3,DM%SI ;ADJUSTED FOR THOSE WE DID
HRL P3,P3
PUSHJ P,HWDUMP ;LIST THE REST OF 'EM
;NOW LIST THE DEVICE INFO, SENSE BYTES ETC
;FIRST RE-PACKAGE THE BYTES IN PLACE
HRRZ P1,WKBUFF+DX%DVL ;GET THE OFFSET
ADDI P1,WKBUFF
MOVEI T1,24 ;A PASS COUNTER
DX%03A: LDB T2,[POINT 8,@P1,9] ;EXTRACT A BYTE
DPB T2,[POINT 8,T3,7] ;REPLACE IT
LDB T2,[POINT 8,@P1,17] ;EXTRACT A BYTE
DPB T2,[POINT 8,T3,15] ;REPLACE IT
LDB T2,[POINT 8,@P1,27] ;EXTRACT A BYTE
DPB T2,[POINT 8,T3,23] ;REPLACE IT
LDB T2,[POINT 8,@P1,35] ;EXTRACT A BYTE
DPB T2,[POINT 8,T3,31] ;REPLACE IT
MOVEM T3,@P1 ;REPLACE THE WORD
AOS P1 ;BUMP THE POINTER
SOJN T1,DX%03A ;GET NEXT IF ANY
;NOW USE HWDUMP TO LIST ALL THESE VALUES
TYPEIT <
DEVICE INFORMATION RECORDED AT TIME OF ERROR
REGISTER CONTENTS TEXT
>
MOVE P1,[XWD 4,24] ;PRINT MODE 4,24 ITEMS
MOVE P2,[XWD DX2NAM,DX2CTL]
HRLZ P3,WKBUFF+DX%DVL ;OFFSET TO AT ERROR VALUES
PUSHJ P,HWDUMP
;NOW FINALLY LIST DEVICE STATISTICS
PJRST DEVSTS ;WILL RETURN TO PROCSD
;HERE ARE REGISTER NAMES AND CONTROL TABLES FOR HWDUMP
;USED WITH DX20 ENTRIES
DX2REG: SIXBIT/CR(00)/
SIXBIT/SR(01)/
SIXBIT/ER(02)/
SIXBIT/MR(03)/
SIXBIT/AS(04)/
SIXBIT/SB(05)/
SIXBIT/DT(06)/
DX2RG1: SIXBIT/SI(20)/
SIXBIT/DN(21)/
SIXBIT/ES(22)/
SIXBIT/TE(23)/
SIXBIT/AY(24)/
SIXBIT/BC(25)/
SIXBIT/E0(26)/
SIXBIT/E1(27)/
SIXBIT/IR(30)/
SIXBIT/PC(31)/
SIXBIT/AL(32)/
SIXBIT/SD(33)/
SIXBIT/FP(34)/
SIXBIT/BW(35)/
SIXBIT/IB(36)/
SIXBIT/MA(37)/
;NOW THE CONTROL TABLE FOR THE MASSBUS VALUES
DX20CT: XWD -1,DX20CR
XWD 50,DXSRDV
XWD -1,DX20ER
XWD 52,DXMRDV
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,DX20DT
DX20C1: XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
;NOW THE SECOND SET
DX2NAM: SIXBIT/SB 0-3/
SIXBIT/ 4-7/
SIXBIT/ 8-11/
SIXBIT/ 12-15/
SIXBIT/ 16-19/
SIXBIT/ 20-23/
SIXBIT/ MCV /
SIXBIT/ MRA /
SIXBIT/ MRB /
SIXBIT/ MRC /
SIXBIT/ MRD /
SIXBIT/ MRE /
SIXBIT/ MRF /
SIXBIT/ CB0 /
SIXBIT/ CB1 /
SIXBIT/ DP0 /
SIXBIT/ DP1 /
SIXBIT/ DP2 /
SIXBIT/ DP3 /
SIXBIT/ LAS /
;NOW THE CONTROL TABLE
;FOR NOW ALL ARE "NOTRAN"
DX2CTL: XWD -1,T7SB0S
XWD -1,DXSB4S
XWD 36,SB81DV
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
DX2FUN: [ASCIZ/ NO OPERATION(00)/]
[ASCIZ/ REWIND & UNLOAD(02)/]
[ASCIZ/ ILLEGAL04)/]
[ASCIZ/ REWIND(06)/]
[ASCIZ/ DRIVE CLEAR(10)/]
[ASCIZ/ SENSE RELEASE(12)/]
[ASCIZ/ ILLEGAL(14)/]
[ASCIZ/ ILLEGAL(16)/]
[ASCIZ/ ILLEGAL(20)/]
[ASCIZ/ ILLEGAL(22)/]
[ASCIZ/ ERASE GAP(24)/]
[ASCIZ/ WRITE TAPE MARK(26)/]
[ASCIZ/ SPACE REC FORWARD(30)/]
[ASCIZ/ SPACE REC BACK(32)/]
[ASCIZ/ SPACE BLOCK FORWARD(34)/]
[ASCIZ/ SPACE BLOCK BACK(36)/]
[ASCIZ/ TEST I-O(40)/]
[ASCIZ/ DATA SEC ERASE(42)/]
[ASCIZ/ SENSE(44)/]
[ASCIZ/ SENSE RESERVE(46)/]
[ASCIZ/ ILLEGAL(50)/]
[ASCIZ/ ILLEGAL(52)/]
[ASCIZ/ ILLEGAL(54)/]
[ASCIZ/ ILLEGAL(56)/]
[ASCIZ/ WRITE DATA(60)/]
[ASCIZ/ WRITE DIAGNOSTIC(62)/]
[ASCIZ/ LOOP WRITE TO READ(64)/]
[ASCIZ/ ILLEGAL(66)/]
[ASCIZ/ READ DATA(70)/]
[ASCIZ/ ILLEGAL(72)/]
[ASCIZ/ READ EXTENDED STATUS(74)/]
[ASCIZ/ READ REVERSE(76)/]
;NOW THE SPECIAL DECODING ROUTINES CALLED FROM THE CONTROL TABLES
;T1 HAS WORD TO TRANSLATE AND P1 MUST BE PRESERVED*****
DX20CR: PUSH P,P1 ;SAVE P1
HLRZ P1,T1 ;ONLY WORRY ABOUT 'AT ERROR' VALUE
TRNN P1,1B35 ;GO?
JRST .+3
TYPEIT < GO + >
ANDI P1,76 ;GET FUNCTION BITS ALONE
LSH P1,-1 ;RIGHT JUSTIF FOR AN INDEX
HRRZ T1,DX2FUN(P1) ;GET THE ADDR OF THE ASCIZ
PUSHJ P,.TSTRG
POP P,P1 ;RESTORE P1
POPJ P,0
DX20ER: PUSH P,P1
MOVE P1,T1
PUSH P,P1 ;NOW SAVE THE ERROR WORD
MOVEI T1,51 ;OFFSET INTO TABLES
MOVEM T1,KONTYP
PUSHJ P,CNIDCD ;DO 1 FOR 1 X-LATION FIRST
POP P,P1 ;RESTORE ERROR WORD
TLNE P1,1B28 ;IF NOT SET, LEAVE NOW
JRST .+3 ;SET, MORE LISTING REQ'D
POP P,P1 ;RESTORE P1
POPJ P,0 ;AND LEAVE
TYPEIT <MPERR CLASS: >
LDB P2,[POINT 4,P1,9] ;GET CLASS CODE
MOVE T1,P2
PUSHJ P,.TOCTW
TYPEIT < ,SUB-CLASS: >
LDB P3,[POINT 4,P1,5] ;AND SUB-CLASS
MOVE T1,P3
PUSHJ P,.TOCTW
PUSHJ P,.TCRLF
PUSHJ P,.TTABC
TYPEIT < = >
CAMLE P2,MPCLS ;CHECK FOR MAX # OF CLASSES WE RECOGNIZE
JRST DX2ER0 ;OUT OF RANGE
;NOW CHECK FOR SUB-CLASS RANGE
MOVE T1,MPCLS(P2) ;T1 GETS BASE ADDR OF SUB-CLASS TABLE
MOVE T2,-1(T1) ;RANGE FOR THIS SUB-CLASS
CAMLE P3,T2 ;OK?
JRST DX2ER1 ;NOPE
ADD T1,P3 ;OK-GET ADDR OF ASCIZ TEXT
MOVE T1,0(T1) ;AND ADDRESS
PUSHJ P,.TSTRG
POP P,P1 ;NOW RESTORE P1
POPJ P,0
DX2ER0: TYPEIT < UNKNOWN MPERR CLASS >
POP P,P1
POPJ P,0
DX2ER1: TYPEIT < UNKNOWN MPERR SUB-CLASS>
POP P,P1
POPJ P,0
;HERE ARE SUB TABLES AND TEXT ADDRS
;FIRST IS TABLE OF CLASSES,EACH ITEM POINTS TO SUB-CLASS TABLE
MPCLS: ^D8 ;CURRENT # OF CLASSES RECOGNIZED
XWD 0,MPCLS1
XWD 0,MPCLS2
XWD 0,MPCLS3
XWD 0,MPCLS4
XWD 0,MPCLS5
XWD 0,MPCLS6
XWD 0,MPCLS7
XWD 0,MPCL10
XWD 0,1 ;CURRENT # OF SUB-CLASS ARGUEMENTS
MPCLS1: [ASCIZ/ UNUSUAL DEVICE STATUS FROM FINAL STATUS SEQUENCE/]
[ASCIZ/ UNUSUAL DEVICE STATUS FROM INITIAL STATUS SEQUENCE/]
XWD 0,0 ;CURRENT #
MPCLS2: [ASCIZ/ SHORT RECORD/]
XWD 0,0
MPCLS3: [ASCIZ/ LONG RECORD/]
XWD 0,0
MPCLS4: [ASCIZ/ DRIVE SELECTION ERROR, NON-EXISTENT/]
XWD 0,0
MPCLS5: [ASCIZ/ RECOVERABLE ERROR-TAPE MOTION- DATA PARITY ERROR/]
XWD 0,2
MPCLS6: [ASCIZ/ RECOVERABLE ERROR-NO TAPE MOTION- DRIVE ADDR. MISMATCH/]
[ASCIZ/ RECOVERABLE ERROR-NO TAPE MOTION- BUS IN PAR ERR WHILE RECEIVING DRIVE ADDR/]
[ASCIZ/ RECOVERABLE ERROR-NO TAPE MOTION- BUS IN PAR ERR WHILE RECEIVING INITIAL STATUS/]
XWD 0,1
MPCLS7: [ASCIZ/ NON-RECOVERABLE ERROR, DATA PATH DETECTED U-BUS PAR ERR/]
[ASCIZ/ NON-RECOVERABLE ERROR, CHANNEL BUS DETECTED U-BUS PAR ERR/]
XWD 0,2
MPCL10: [ASCIZ/ FATAL ERROR, DRIVE TYPE MISMATCH/]
[ASCIZ/ FATAL ERROR, PAR ERR RECEIVING DRIVE ADDR DURING C.U. INIT SEQ/]
[ASCIZ/ FATAL ERROR, PAR ERR RECEIVING DRIVE STATUS DURING C.U. INIT SEQ/]
;HERE DECODE DX20 DRIVE TYPE REGISTER
DX20DT: PUSH P,P1
MOVE P1,T1 ;SAVE WORD TO TRANSLATE
TYPEIT < DRIVE TYPE: >
LDB T1,[POINT 9,P1,17] ;EXTRACT DRIVE TYPE
PUSHJ P,.TOCTW
;ADD CODE HERE TO TRANSLATE TO TYPE
TYPEIT <, HDWR VER: >
LDB T1,[POINT 7,P1,8] ;EXTRACT VERSION #
PUSHJ P,.TOCTW
POP P,P1
POPJ P,0
;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)/ ;CONTROL & STATUS #1
SIXBIT/SR(01)/ ;DRIVE STATUS
SIXBIT/ER(02)/ ;ERROR REGISTER #1
SIXBIT/MR(03)/ ;MAINTENANCE REGISTER
SIXBIT/AS(04)/ ;ATTENTION SUMMARY
SIXBIT/DA(05)/ ;DESIRED SECTOR/TRACK ADDRESS
SIXBIT/DT(06)/ ;DRIVE TYPE
SIXBIT/LA(07)/ ;LOOK-AHEAD
SIXBIT/SN(10)/ ;SERIAL NUMBER
SIXBIT/OF(11)/ ;OFFSET
SIXBIT/DC(12)/ ;DESIRED CYLINDER
SIXBIT/CC(13)/ ;CURRENT CYLINDER
SIXBIT/E2(14)/ ;ERROR REGISTER #2
SIXBIT/E3(15)/ ;ERROR REGISTER #3
SIXBIT/EP(16)/ ;ECC POSITION REGISTER
SIXBIT/PL(17)/ ;ECC PATTERN REGISTER
RM03RG: SIXBIT/CS1 00/ ;CONTROL & STATUS #1
SIXBIT/DS 01/ ;DRIVE STATUS
SIXBIT/ER1 02/ ;ERROR REGISTER #1
SIXBIT/MR1 03/ ;MAINTENANCE REGISTER #1
SIXBIT/AS 04/ ;ATTENTION SUMMARY
SIXBIT/DA 05/ ;DESIRED SECTOR/TRACK ADDRESS
SIXBIT/DT 06/ ;DRIVE TYPE
SIXBIT/LA 07/ ;LOOK AHEAD
SIXBIT/SN 10/ ;SERIAL NUMBER
SIXBIT/OF 11/ ;OFFSET
SIXBIT/DC 12/ ;DESIRED CYLINDER
SIXBIT/HR 13/ ;**HOLDING REGISTER**
SIXBIT/MR2 14/ ;MAINTENANCE REGISTER #2
SIXBIT/ER2 15/ ;ERROR REGISTER #2
SIXBIT/EC1 16/ ;ECC POSITION REGISTER
SIXBIT/EC2 17/ ;ECC PATTERN REGISTER
;NOW THE CONTROL TABLE ADDRESSES
;
;THIS TABLE MUST BE KEPT IN LINE WITH THE UNIT TYPE TABLE IN
; THE UNIVERSAL FILE. IN PARTICULAR THERE MUST BE AT LEAST
; ".UTMAX" ITEMS IN THE TABLE.
MSCNTL: 0
XWD 0,RP04CT ;RP04
XWD 0,RS04CT ;RS04
XWD 0,TU16CT ;TU45
XWD 0,TU16CT ;TU16
XWD 0,RP05CT ;RP05
XWD 0,RP05CT ;RP06 [315]
XWD 0,DX20CT ;TU70 (REG. 0-6)
XWD 0,DX20C1 ; TU70 (REG. 20-37)
XWD 0,RM03CT ;RM03 [601]
0
0 ;XWD 0,TU77CT ;TU77
;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)/
;SPECIAL ROUTINES TO DECODE TU70 SENSE BYTES, COPIED FROM
;SYSERB.MAC
T7SB0S: PUSH P,P1 ;SAVE OUR INDEX
MOVEI T1,32 ;OFFSET FOR SENSE BYTES 0-3
MOVEM T1,KONTYP
MOVE P1,P2 ;WORD TO DECODE
PUSH P,P2
PUSHJ P,CNIDCD
POP P,P2 ;RESTORE WORD TO TRANSLATE
TYPEIT < TIE = >
LDB P3,[POINT 8,P2,23] ;TRACK IN ERROR
SETZ T1,
TRNE P3,1B28
MOVEI T1,1
PUSHJ P,.TOCTW
SETZ T1,
TRNE P3,1B29
MOVEI T1,1
PUSHJ P,.TOCTW
SETZ T1,
TRNE P3,1B30
MOVEI T1,1
PUSHJ P,.TOCTW
SETZ T1,
TRNE P3,1B31
MOVEI T1,1
PUSHJ P,.TOCTW
SETZ T1,
TRNE P3,1B32
MOVEI T1,1
PUSHJ P,.TOCTW
SETZ T1,
TRNE P3,1B33
MOVEI T1,1
PUSHJ P,.TOCTW
SETZ T1,
TRNE P3,1B34
MOVEI T1,1
PUSHJ P,.TOCTW
SETZ T1,
TRNE P3,1B35
MOVEI T1,1
PUSHJ P,.TOCTW
POP P,P1 ;GET INDEX BBACK
POPJ P,0 ;GO HOME
;HERE SPECIAL DECODING FOR TU70/72 SENSE BYTES 4-7
DXSB4S: PUSH P,P1 ;SAVE INDEX
MOVEI T1,33 ;OFFSET TO TABLES
MOVEM T1,KONTYP
MOVE P1,P2 ;WOD TO TRANSLATE
PUSH P,P2 ;SAVE IT
PUSHJ P,CNIDCD ;TRANSLATE IT
POP P,P2 ;GET WORD BACK
LDB P3,[POINT 3,P2,26] ;COLUMN FAILURES
SKIPE P3 ;ANY THERE?
JRST DXSB4A ;YES
POP P,P1
POPJ P,0
DXSB4A: PUSHJ P,.TSPAC
MOVE P2,P3
ANDI P3,3 ;GET COL BITS ALONE
CAIN P3,1
MOVEI T1,[ASCIZ/RIGHT/]
CAIN P3,2
MOVEI T1,[ASCIZ/LEFT/]
CAIN P3,3
MOVEI T1,[ASCIZ/BOTH/]
PUSHJ P,.TSTRG
TYPEIT < COL.FAIL >
MOVEI T1,[ASCIZ/TOP/]
TRNE P2,4 ;TOP OR BOTTOM?
MOVEI T1,[ASCIZ/BOTTOM/]
PUSHJ P,.TSTRG
POP P,P1 ;GET INDEX BACK
POPJ P,0
;ROUTINES TO TRANSLATE MASSBUS DEVICE REG. AS SPECIAL ROUTINES
;T1 HAS WORD TO TRANSLATE
;
;THIS TABLE MUST BE KEPT IN LINE WITH THE UNIT TYPE TABLE IN
; THE UNIVERSAL FILE. IN PARTICULAR THERE MUST BE AT LEAST
; ".UTMAX" ITEMS IN THE TABLE.
MDE011: 0
XWD 0,RP04CR
XWD 0,RS04CR
XWD 0,TU16CR ;TU45
XWD 0,TU16CR
XWD 0,RP04CR ;RP05
XWD 0,RP04CR ;RP06
XWD 0,DX20CR ;TU70
XWD 0,DX20CR
XWD 0,RP04CR ;RM03 [601]
0
XWD 0,TU16CR ;TU77
RS04CR: HLRZ P4,T1 ;SAVE ERROR WORD
TRNN P4,1B24 ;AVAIL?
JRST .+3 ;NO
TYPEIT <DEV.AVAIL.,>
TRNN P4,1B35 ;GO?
JRST .+3 ;NO
TYPEIT < GO + >
ANDI P4,70 ;GET FUNCTION
LSH P4,-3 ;MOVE IT OVER FOR INDEX
HRRZ T1,RS4FUN(P4) ;GET FUNCTION ASCIZ ADDR
PJRST .TSTRG ;DUMP IT
RP04CR: HLRZ P4,T1 ;GET WORD
TRNN P4,1B24 ;AVAIL?
JRST .+3 ;NO
TYPEIT < DEV.AVAIL.,>
TRNN P4,1B35 ;GO?
JRST .+3
TYPEIT < GO + >
ANDI P4,76 ;GET FUNCTION
LSH P4,-1 ;STRIP GO BIT
HRRZ T1,RP4FUN(P4) ;SETUP FUNCT.ASCIZ ADDR
PJRST .TSTRG ;SAY IT
TU16CR: HLRZ P4,T1
TRNN P4,1B24 ;AVAIL?
JRST .+3 ;NO
TYPEIT < DEV.AVAIL. >
TRNN P4,1B35 ;GO?
JRST .+3
TYPEIT < GO + >
ANDI P4,76 ;GET FUNCTION
LSH P4,-1 ;SETUP INDEX
HRRZ T1,TU6FUN(P4) ;USE IT
PJRST .TSTRG
;SOME TABLES
RS4FUN: [ASCIZ/ NO OPERATION(00)/]
[ASCIZ/ DRIVE CLEAR(02)/]
[ASCIZ/ ILLEGAL(04)/]
[ASCIZ/ SEARCH(06)/]
[ASCIZ/ ILLEGAL(10)/]
[ASCIZ/ ILLEGAL(12)/]
[ASCIZ/ WRITE(14)/]
[ASCIZ/ READ(16)/]
RP4FUN: [ASCIZ/ NO OPERATION(00)/]
[ASCIZ/ STAND BY(02)/]
[ASCIZ/ SEEK(04)/]
[ASCIZ/ RECALIBRATE(06)/]
[ASCIZ/ DRIVE CLEAR(10)/]
[ASCIZ/ RELEASE(12)/]
[ASCIZ/ OFFSET(14)/]
[ASCIZ/ RETURN CENTERLINE(16)/]
[ASCIZ/ READ-IN(20)/]
[ASCIZ/ PACK ACK.(22)/]
[ASCIZ/ ILLEGAL(24)/]
[ASCIZ/ ILLEGAL(26)/]
[ASCIZ/ SEARCH(30)/]
[ASCIZ/ ILLEGAL(32)/]
[ASCIZ/ ILLEGAL(34)/]
[ASCIZ/ ILLEGAL(36)/]
[ASCIZ/ ILLEGAL(40)/]
[ASCIZ/ ILLEGAL(42)/]
[ASCIZ/ ILLEGAL(44)/]
[ASCIZ/ ILLEGAL(46)/]
[ASCIZ/ WRITE CHECK DATA(50)/]
[ASCIZ/ WRITE CHECK HEADER & DATA(52)/]
[ASCIZ/ ILLEGAL(54)/]
[ASCIZ/ ILLEGAL(56)/]
[ASCIZ/ WRITE DATA(60)/]
[ASCIZ/ WRITE HEADER & DATA(62)/]
[ASCIZ/ ILLEGAL(64)/]
[ASCIZ/ ILLEGAL(66)/]
[ASCIZ/ READ DATA(70)/]
[ASCIZ/ READ HEADER&DATA(72)/]
[ASCIZ/ ILLEGAL(74)/]
[ASCIZ/ ILLEGAL(76)/]
TU6FUN: [ASCIZ/ NO OPERATION(00)/]
[ASCIZ/ REWIND,OFFLINE(02)/]
[ASCIZ/ ILLEGAL(04)/]
[ASCIZ/ REWIND(06)/]
[ASCIZ/ DRIVE CLEAR(10)/]
[ASCIZ/ ILLEGAL(12)/]
[ASCIZ/ ILLEGAL(14)/]
[ASCIZ/ ILLEGAL(16)/]
[ASCIZ/ READIN(20)/]
[ASCIZ/ ILLEGAL(22)/]
[ASCIZ/ ERASE(24)/]
[ASCIZ/ WRITE FILEMARK(26)/]
[ASCIZ/ SPACE FWD.(30)/]
[ASCIZ/ SPACE REV.(32)/]
[ASCIZ/ ILLEGAL(34)/]
[ASCIZ/ ILLEGAL(36)/]
[ASCIZ/ ILLEGAL(40)/]
[ASCIZ/ ILLEGAL(42)/]
[ASCIZ/ ILLEGAL(44)/]
[ASCIZ/ ILLEGAL(46)/]
[ASCIZ/ WRITE CHECK FWD.(50)/]
[ASCIZ/ ILLEGAL(52)/]
[ASCIZ/ ILLEGAL(54)/]
[ASCIZ/ WRITE CHECK REV.(56)/]
[ASCIZ/ WRITE FWD.(60)/]
[ASCIZ/ ILLEGAL(62)/]
[ASCIZ/ ILLEGAL(64)/]
[ASCIZ/ ILLEGAL(66)/]
[ASCIZ/ READ FWD.(70)/]
[ASCIZ/ ILLEGAL(72)/]
[ASCIZ/ ILLEGAL(74)/]
[ASCIZ/ READ REV.(76)/]
;SOME ROUTINES TO DUMP SOME PARTICULAR REGISTERS.
;CALLED FROM HWDUMP FIRST TO OUTPUT DESIRED
;SECTOR/TRACK FOR RP04
RP04BA: HLRZ P4,T1 ;GET ERROR WORD ALONE
MOVE P3,P4
ANDI P3,17400 ;MASK TO GET TRACK ALONE
LSH P3,-^D8 ;MOVE IT OVER
TYPEIT <D. TRK = >
MOVE T1,P3
PUSHJ P,.TOCTW ;PRINT IT
TYPEIT <, D.SECT. = >
ANDI P4,37 ;GET SECTOR
MOVE T1,P4
PJRST .TOCTW ;DO IT
;TO DUMP RM03 OFFSET REG.
RM03MO: HRRZ P4,T1
TYPEIT <AT END:>
TRNE P4,1B23 ;FORMAT BIT ?
JRST [ TYPEIT <FMT16,>
JRST .+1 ]
TRNE P4,1B24 ;ECI ON?
PUSHJ P,RPMO02
TRNE P4,1B25 ;HCI?
PUSHJ P,RPMO03
TRNE P4,1B28 ;OFD ON?
JRST [ TYPEIT <OFD>
JRST .+1 ]
POPJ P,0
;TO DUMP RP04 OFFSET REG.
RP04MO: HRRZ P4,T1
TYPEIT <AT END:>
TRNN P4,1B20 ;SIGN CHANGE?
PUSHJ P,RPMO00 ;YUP SAY SO
TRNE P4,1B23 ;FORMAT BIT ?
PUSHJ P,RPMO01
TRNE P4,1B24 ;ECI ON?
PUSHJ P,RPMO02
TRNE P4,1B25 ;HCI?
PUSHJ P,RPMO03
TYPEIT < OFFSET = >
TRNE P4,1B28 ;NEGATIVE DIR.?
PUSHJ P,RPMO04 ;YES
SETZ P3, ;ZERO COUNTER
TRNE P4,1B30 ;800?
ADDI P3,^D800
TRNE P4,1B31 ;400?
ADDI P3,^D400
TRNE P4,1B32 ;200?
ADDI P3,^D200
TRNE P4,1B33 ;100?
ADDI P3,^D100
TRNE P4,1B34 ;50?
ADDI P3,^D50
TRNE P4,1B35 ;25?
ADDI P3,^D25
MOVE T1,P3 ;TOTAL IN T1 NOW
MOVE T2,MDETYP ;[525]GET DEVICE TYPE
CAIN T2,6 ;RP06?
IDIVI T1,2 ;OFFSETS ARE HALF AS BIG[525]
SKIPN T1 ;NO OFFSET?
PJRST RP04M1 ;YUP-NONE
PUSHJ P,.ODECW ;PRINT WITH A "."
TYPEIT < U IN.>
POPJ P,0 ;GO HOME
RP04M1: TYPEIT <NONE>
POPJ P,0
RPMO00: TYPEIT <SIGN CHANGE OFF,>
POPJ P,0
RPMO01: TYPEIT <FMT22,>
POPJ P,0
RPMO02: TYPEIT <ECI,>
POPJ P,0
RPMO03: TYPEIT <HCI,>
POPJ P,0
RPMO04: TYPEIT < - >
POPJ P,0
;NOW FOR RP04 DESIRED OR CURRENT CYL
RP04DC: HLRZ T1,T1 ;GET ERROR ALONE
ANDI T1,1777 ;[505]ONLY CYL BITS WANTED
MOVE T2,MDEDTP ;[527][315]GET DEVICE TYPE
CAIE T2,6 ;RP06?
TRZ T1,1000 ;[505]NO-CLEAR EXTRA BIT
PJRST .ODECW
;RS04 DESIRED SECTOR/TRACK ADDRESS
RS04BA: HLRZ P4,T1
MOVE P3,P4
ANDI P3,7700 ;TRACK BITS ONLY
LSH P3,-6 ;MOVE IT OVER
TYPEIT <D. TRK = >
MOVE T1,P3
PUSHJ P,.TOCTW
TYPEIT <, D.SECT = >
ANDI P4,77 ;SECTOR BITS
MOVE T1,P4
PJRST .TOCTW
;NOW FOR TU16 REGISTERS
TU16TC: HLRZ P4,T1
TRNN P4,1B20
JRST .+3
TYPEIT <ACCL,>
TRNN P4,1B21
JRST .+3
TYPEIT <TCW,>
TRNN P4,1B22
JRST .+3
TYPEIT < FCS,>
TRNN P4,1B23
JRST .+3
TYPEIT < EAO/DTE,>
MOVE P3,P4
ANDI P3,3400 ;GET DENSITY
LSH P3,-10
MOVE T1,TU6DEN(P3)
PUSHJ P,.TSTRG
MOVE P3,P4
ANDI P3,360 ;GET FORMAT
LSH P3,-4
MOVE T1,TU6FOR(P3)
PUSHJ P,.TSTRG
TRNN P4,1B32
JRST .+3
TYPEIT < EVEN PARITY>
ANDI P4,7 ;GET SLAVE #
TYPEIT < SLAVE #>
MOVE T1,P4
PJRST .TOCTW
TU6DEN: [ASCIZ/ 200BPI NRZ/]
[ASCIZ/ 556BPI NRZ/]
[ASCIZ/ 800BPI NRZ/]
[ASCIZ/ 800BPI NRZ/]
[ASCIZ/ 1600BPI PE/]
[ASCIZ/ 1600BPI PE/]
[ASCIZ/ 1600BPI PE/]
[ASCIZ/ 1600BPI PE/]
TU6FOR: [ASCIZ/ 10 CORE-DUMP/]
[ASCIZ/ 10 7-TRACK/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ 10 COMPATIBLE/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
[ASCIZ/ UNKNOWN/]
;CONTROL TABLES FOR USE WITH HWDUMP ROUTINE
;LH = KONTYP TABLE INDEX FOR THIS REG IF SINGLE BIT
; TRANSLATION OR -1 FOR SPECIAL ROUTINE
;RH = ADDR TO ENGLISH BIT TABLES (XXXXDV) FOR JFLOOP
; OR ADDR OF SPEC ROUTINE.
RP04CT: XWD -1,RP04CR
XWD 20,RP04SR
XWD 21,RP04ER
XWD 47,RPMRDV
XWD -1,NOTRAN
XWD -1,RP04BA
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,RP04MO
XWD -1,RP04DC
XWD -1,RP04DC
XWD 22,RP04CB
XWD 23,RP04DA
XWD -1,NOTRAN
XWD -1,NOTRAN
RS04CT: XWD -1,RS04CR
XWD 24,RS04SR
XWD 25,RS04ER
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,RS04BA
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
TU16CT: XWD -1,TU16CR
XWD 26,TU16SR
XWD 27,TU16ER
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,TU16TC
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
;TABLE USED FOR BOTH RP05&RP06
RP05CT: XWD -1,RP04CR
XWD 20,RP04SR
XWD 21,RP04ER
XWD 47,RPMRDV
XWD -1,NOTRAN
XWD -1,RP04BA
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,RP04MO
XWD -1,RP04DC
XWD -1,RP04DC
XWD 34,RP05DV
XWD 35,RP06DV
XWD -1,NOTRAN
XWD -1,NOTRAN
RM03CT: XWD -1,RP04CR ; [601]
XWD 20,RP04SR
XWD 21,RP04ER
XWD 54,RM3MR1
XWD -1,NOTRAN
XWD -1,RP04BA
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,NOTRAN
XWD -1,RM03MO
XWD -1,RP04DC
XWD -1,NOTRAN
XWD 55,RM3MR2
XWD 56,RM3ER2
XWD -1,NOTRAN
XWD -1,NOTRAN
DEVTYP:0
0
SOFTDV
TM10DV
RH10DV
RH20DV
DX10DV
TC10DV
DL10DV
DL11DV
KL1ADV
RH11DV
UBADV
0
0
0
RP04SR
RP04ER
RP04CB
RP04DA
RS04SR
RS04ER
TU16SR
TU16ER
ICPCX1
DXTAGB
DXSB03
DXSB47
RP05DV
RP06DV
FESTDV
FELPDV
LPSADV
LPSBDV
FECDDV
CDSTDV
RHSWDV
RLD1DV
FEKLDV
RPMRDV
DXSRDV
DXERDV
DXMRDV
CS2DV
RM3MR1
RM3MR2
RM3ER2
;ROUTINES TO WORK WITH KLERROR FILE PACKETS
KLE200: SKIPE KLEFL2 ;ALREADY PROCESSING FILE?
PUSHJ P,KLEDMP ;WE SHOULDN'T BE!!
SETOM KLEFL1 ;WATCH FOR NEXT CODE 201
POPJ P,0 ;BACK TO BCK130
KLE201: SKIPN KLEFL2 ;ALREADY BUILDING KLEFIL?
PUSHJ P,KL201B ;NO-CHECK FURTHER
SKIPE KLEFL1 ;1ST PACKET?
PUSHJ P,KLEFCL ;CLEAR WORK AREA & INIT POINTERS
SETZM KLEFL1 ;DONE THE INIT
SETOM KLEFL2 ;NOW WE'RE BUILDING THE FILE INTO KLEFIL
HRRZ T1,WKBUFF+FE%OFF
ADDI T1,WKBUFF ;CORRECTED POINTER
LDB T2,[POINT 16,0(T1),15] ;GET STD STATUS BYTE
TRNE T2,1B30 ;EOF?? IE LAST PACKET??
SETOM KLEFL3 ;YES-DO LISTING IF REQ'D
;NOW ADD THIS PACKET TO KLEFIL
MOVEI P3,1 ;INIT W ORD COUNTER
MOVE P1,WKBUFF+FE%OFF ;GET POINTER WORD
ADDI P1,WKBUFF ;CORRECTED
SKIPE KLEFL4 ;SHOULD WE SKIP SOME WORDS?
PUSHJ P,SKPKLE ;YES-GO DO IT
MOVE P2,KLEPNT ;WHERE TO PUT WORDS
SKIPE KLEFL3 ;WORK ON THIS PACKET AT ALL?
JRST PAKDON ;NO
LDB T1,[POINT 16,0(P1),31] ;FORGET 1ST BYTE
MOVEM T1,0(P2) ;STORE IT AWAY
AOBJN P2,.+2 ;UPDATE STORE POINTER
PUSHJ P,KLEDON ;FILE IS FINISHED
AOS P3
CAMN P3,PAKSIZ
JRST PAKDON
AOBJN P1,.+2 ;UPDATE FETCH POINTER
JRST PAKDON ;PACKET IS FINISHED
KL201A: LDB T1,[POINT 16,0(P1),15] ;GET LEFT BYTE
MOVEM T1,0(P2) ;PUT IT AWAY
AOBJN P2,.+2 ;UPDATE STORE POINTER
PUSHJ P,KLEDON ;FILE IS FINISHED
AOS P3
CAMN P3,PAKSIZ
JRST PAKDON
LDB T1,[POINT 16,0(P1),31] ;GET RIGHT BYTE
MOVEM T1,0(P2) ;AWAY
AOBJN P2,.+2 ;UPDATE STORE POINTER
PUSHJ P,KLEDON ;FILE IS FINISHED
AOS P3
CAMN P3,PAKSIZ
JRST PAKDON
AOBJN P1,KL201A ;GET NEXT PAIR
PAKDON: MOVEM P2,KLEPNT ;STORE POINTER AWAY
SKIPN KLEFL3 ;WAS THIS LAST PACKET?
JRST ABORT ;[231]KLEFIL IS NOT COMPLETE-DO NOTHING ELSE WITH
;THIS ENTRY AND GET NEXT ENTRY.
SETZM KLEFL3 ;CLEAR THE FINISHED FLAG &
SETZM KLEFL2 ;CLEAR THE BUILDING FLAG
POPJ P,0 ;KLEFIL IS COMPLETE-BCK130 ROUTINES WILL
;DETERMINE IF IT SHOULD BE LISTED AND DO SUMMARY.
;LISTING WILL BE DONE THROUGH PROCSD ROUTINES.
KL201B: SKIPE KLEFL1 ;1ST PACKET ALREADY SET?
POPJ P,0 ;YUP-ALL IS WELL
WARN <UNEXPECTED CODE 130-201 FOUND,ASSUMING START OF FILE>
TYPEIT <
$$$$$$$ >
TYPEIT <UNEXPECTED CODE 130-201 FOUND,ASSUMING START OF FILE>
PUSHJ P,.TCRLF ;CONTINUE ON NEXT LINE
SETOM KLEFL1 ;FORCE START OF FILE
POPJ P,0
;KLEFCL--ROUTINE TO CLEAR BUFFER AREA AND INIT POINTERS
KLEFCL: SETZM KLEFL4
SETZM KLEFL5 ;CLEAR SOME FLAGS
SETZM KLEFIL ;CLEAR START
MOVE T1,[XWD KLE1FL,KLE1FL+1]
BLT T1,KLEEND ;CLEAR IT ALL INCL KLE1FL AREA
HRRZ T2,WKBUFF+FE%OFF ;GET OFFSET
ADDI T2,WKBUFF ;CORRECTED
LDB T3,[POINT 16,1(T2),15] ;THAT GETS FILE LENGTH!?
IDIVI T3,2 ;[230]CONVERT TO WORDS FROM BYTES
SKIPN T3 ;BUT IF ZERO
MOVEI T3,KLESIZ ;USE DEFAULT
CAILE T3,KLESIZ ;ALSO IF GREATER
MOVEI T3,KLESIZ ;USE DEFAULT
MOVN T1,T3 ;-WC
MOVS T1,T1 ;TO LH
HRRI T1,KLEFIL ;START THERE
MOVEM T1,KLEPNT ;STORE IT AWAY
POPJ P,0
;HERE WHEN WC FOR KLEFIL IS EXHAUSTED
KLEDON: SKIPE KLEFL5 ;DOING 2ND HALF ALREADY?
JRST KLEDN1 ;YES
HRRZ T1,P2 ;LAST ADDR USED
SUBI T1,KLEFIL ;ADJUSTED START ADDR
IDIVI T1,200 ;# BLOCKS USED
MOVEI T1,200 ;INTERESTED IN REMAINDER ONLY
SUB T1,T2 ;T1 HOLDS # OF WDS TO SKIP TO GET
;TO START OF NEXT BLOCK IN PDP-11 FORMAT
CAIN T1,200 ;BUT IF ZERO
JRST KLEDN2
KLEDN4: HLRE T2,P1 ;P1HOLDS PACKET PNTR
MOVMS T2,T2 ;# LEFT IN THIS PACKET
CAMGE T1,T2 ;MORE THAN IN THIS PACKET?
JRST KLEDN3 ;NO
SUB T1,T2 ;YES,T1 GETS REMAINDER TO SKIP IN
;NEXT PACKET
SKIPE T1 ;NOW = 0?
SETOM KLEFL4 ;REMEMBER TO SKIP
MOVEM T1,KLESKP ;SAVE THE NUMBER
SETOM KLEFL5 ;NOW DOING 2ND HALF
HRLZI T1,KLESIZ ;MAX LENGTH
MOVNS T1,T1
HRRI T1,KLE1FL ;SECOND AREA
MOVEM T1,KLEPNT ;FOR FUTURE USE
JRST ABORT ;NO MORE FOR THIS ENTRY
;HERE WHEN 2ND RECORD WC EXPIRES--SHOULDN'T HAPPEN BUT...
KLEDN1: SUBI P2,1 ;ADJUST POINTER FOR THIS WORD
MOVEM P2,KLEPNT ;AND STORE IT
JRST ABORT ;WASTE REST OF ENTRIES UNTIL EOF IS SEEN IN
;PACKET. POINTER IS NOT STORED IN KLEPNT SO ALL
;SUCCEEDING WORDS WILL BE OVERWRITTEN AT END OF
;KLE1FL.
;HERE TO SKIP &STAY IN CURRENT ENTRY.
;T1 HAS # TO SKIP
KLEDN3: IDIVI T1,2 ;2 WDS PER KL WORD
ADD P1,T1 ;RH IS FIXED
HLRE T2,P1 ;GET -WC
ADD T2,T1 ;FIX IT
HRL P1,T2 ;RETURN IT
LSH T1,1
ADD P3,T1 ;UPDATE BYTE CNT
;AND FALL INTO
;HERE IF 0 WDS TO SKIP BETWEEN RECORDS--SHOULD BE NORMAL CASE(I HOPE)
KLEDN2: SETOM KLEFL5 ;WORK ON 2ND HALF
HRLZI T1,KLESIZ ;MAX
MOVNS T1,T1
HRRI T1,KLE1FL ;WHERE TO PUT WORDS
MOVEM T1,KLEPNT ;FOR FUTURE USE
MOVE P2,T1 ;SETUP NEW PNTR
; POPJ P,0 ;BACK TO OUR CALLER
JRST ABORT ;THIS SEEMS TO BE THE CORRECT THING
;TO DO,IF WE WASTE THE REST OF THIS ENTRY
;THE SECOND RECORD APPEARS TO BE BACK IN
;SYNC FOR VERSION 1B OF THE MONITOR.
;HERE TO SKIP WORDS AT THE START OF PACKET PROCESSING
SKPKLE: MOVE T1,KLESKP ;# TO SKIP
JRST KLEDN4 ;GET SOME CODE CHEAP!!
;ROUTINE TO LIST PARTIAL CONTENTS OF KLEFIL CALLED WHEN ANOTHER
;START OF FILE(CODE 201) IS DETECTED OR ERROR FILE INCONSISTENCY
;DEBUG SWITCH FOR 'KLERR' OCTAL DUMP
KLEDMP: IFE DEBUGA, <
WARN <INCOMPLETE KLERROR ENTRY SEEN!>
POPJ P,0
>;END DEBUGA [530]
IFN DEBUGA, <
PUSHJ P,TITLST ;FRESH PAGE
SETZM KLEFL2
SETZM KLEFL3 ;CLEAR FLAGS
WARN <DUMPING PARTIAL CONTENTS OF KLERROR FILE IN OCTAL>
TYPEIT <
*** DUMPING PARTIAL CONTENTS OF KLERROR FILE IN OCTAL ***
>
SETZ P3,
TYPEIT < # OF KLERROR BYTES DUMPED: >
HRRZ T1,KLEPNT ;LAST ADDR USED
SUBI T1,KLEFIL ;1ST USED
ADDI T1,1 ;ADJUST FOR 1ST
MOVMS T1,T1 ;ABSOLUTE MAGNITUDE
MOVEI T2,KLESIZ ;SETUP A VALUE
IMULI T2,2
CAMLE T1,T2 ;TOO BIG??
MOVE T1,T2 ;CHANGE TO MAX
MOVE P4,T1 ;SAVE IT
PUSHJ P,.ODECW ;DUMP IN DECIMAL
TYPEIT <
*** DUMPING 1ST RECORD ***
>
PUSHJ P,.TCRLF
PUSHJ P,.TCRLF
;SAME CODE AS IN STBUFA!
KLEDMA: MOVEI P1,8 ;WORDS PER LINE
KLEDMB: PUSHJ P,SPACE3
MOVEI P2,^D12 ;CHARACTERS PER WORD
PUSHJ P,KLEDMX ;GET A WORD INTO T1
MOVE T2,T1
KLEDMC: MOVEI T1,0
ROTC T1,3 ;GET 3 BITS
ADDI T1,60 ;CONVERT TO ASCIZ
PUSHJ P,.TCHAR
SOJG P2,KLEDMC ;NEXT 3 BITS
MOVE P2,P4 ;ANY MORE WORDS?
CAIN P2,1
POPJ P,0
SOJG P1,KLEDMB ;FINISH THE LINE
PUSHJ P,.TCRLF ;NEXT LINE
JRST KLEDMA ;START AGAIN
KLEDMX: SOSGE P4
JRST KLEDMZ ;BUMP AND RETURN
AOJ P3,
CAILE P3,KLESIZ ;DONE 1ST RECORD?
PUSHJ P,KLEDMY ;ADJUST FOR 2ND
MOVE T1,KLEFIL(P3) ;GET NEXT WORD
POPJ P,0
KLEDMY: MOVE T1,[XWD KLE1FL,KLEFIL] ;DON'T BOTHER CLEARING
BLT T1,LOWEND-1
TYPEIT <
*** DUMPING 2ND RECORD ***
>
POPJ P,0 ;NOW CONTINUE
KLEDMZ: POP P,T1 ;DUMMY TO GET RID OF OUR CALLER
POPJ P,0 ;NOW BACK TO KLEDMP'S CALLER
>;END DEBUGA [530]
SUBTTL OUTPUT LISTING RELATED ROUTINES
;BCKXXX -- SUBROUTINES TO DETERMINE LISTING AND SUMMATION
; ELIGIBILITY BASED ON BITS IN ENTCHR TABLE
;CALL PUSHJ P,@BITCHK(ERROR CODE)
;
;RETURN CALL+1 TO LIST
; JRST ABORT TO GO TO NEXT ENTRY
;CHANGED WITH EDIT 211 TO SUPPORT USING ONLY /DEV:SWITCH
BCK101: MOVE P1,ERTYPE
MOVE P2,ENTCHR(P1) ;CHARACTERISTICS OF ENTRY
PUSH P,P2 ;SAVE P2
TLNE P2,E.LSUM ;WANT SUMMARY?
PUSHJ P,SUM101 ;GO DO IT
POP P,P2 ;RESTORE P2
TLNN F,F.DEV ;EDIT 211-SAID /DEV:?
JRST BC101A ;NO GO AROUND
MOVE T1,[SIXBIT/KLCPU/]
CAME T1,DEV ;MATCH?
JRST ABORT ;NOPE!
TLNE F,F.OSUM ;ANY TYPE SWITCH SPECIFIED?
TLO P2,E.LALL ;NO FORCE LISTING
BC101A: TLNE P2,E.LALL ;LIST ALL?
POPJ P,0 ;YES
TLNE P2,E.LPER ;LIST PERFORMANCE
POPJ P,0 ;YES
JRST ABORT ;THAT'S ALL TO CHECK
BCK102: MOVE P1,ERTYPE
MOVE P2,ENTCHR(P1) ;CHARACTERISTICS OF ENTRY
PUSH P,P2 ;SAVE P2
TLNE P2,E.LSUM ;WANT SUMMARY?
PUSHJ P,SUM102 ;GO DO IT
POP P,P2 ;RESTORE P2
TLNN F,F.DEV ;EDIT 211-SAID /DEV:?
JRST BC102A ;NO GO AROUND
MOVE T1,[SIXBIT/KLCPU/]
CAME T1,DEV ;MATCH?
JRST ABORT ;NOPE!
TLNE F,F.OSUM ;ANY TYPE SWITCH SPECIFIED?
TLO P2,E.LALL ;NO FORCE LISTING
BC102A: TLNE P2,E.LALL ;LIST ALL?
POPJ P,0 ;YES
TLNE P2,E.LPER ;LIST PERFORMANCE
POPJ P,0 ;YES
JRST ABORT ;THAT'S ALL TO CHECK
BCK111: MOVE P1,ERTYPE
MOVE P4,ENTCHR(P1) ;GET CHAR WORD
PUSH P,P4 ;SAVE CHARACTERISTICS
TLNE P4,E.LSUM ;SUMMARY?
PUSHJ P,SUM111
TLNN F,F.TRY ;SAID /RETRY? [126]
JRST BC111A ;NO
HRRZ T1,WKBUFF+MB%FES ;GET # RETRIES
CAMG T1,RETRY ;ENTRY VALUE GREATER
JRST ABORT ;NO-DON'T LIST
BC111A: TLNN F,F.DEV ;SAID /DEV:?
JRST BK111B ;NO! - SKIP THIS SECTION
MOVE T1,DEV ;YES! - GET SPECIFIED NAME
MOVE T2,MDEDTP ;GET THIS ENTRIES DEVICE TYPE
CAMN T1,MDE000(T2) ;ARE THEY THE SAME? [606]
JRST .+3 ;YES! - FORCE LISTING
MOVEI P3,MB%NAM ;NO! - TRY GENERAL TYPE
PUSHJ P,DEVCHK
POP P,P4 ;GET CHARACTERISTICS BACK
TLNE F,F.OSUM ;ANY TYPE SWITCH CALLED LIKE /MASALL?
TLO P4,E.LALL ;NO-FORCE LISTING
PUSH P,P4 ;SAVE CHARACTERISTICS
BK111B: TRNN F,F.NDEV ;/NDEV:?
JRST BC111B ;NOPE
MOVEI P3,MB%NAM
PUSHJ P,NDVCHK## ;GO CHECK
BC111B: TLNN F,F.ID ;SAID /ID:?
JRST BC111C
MOVEI P3,MB%VID
PUSHJ P,IDCHK
BC111C: TLNN F,F.STR ;SAID /STR?
JRST BC111X ;NO
MOVEI P3,MB%VID ;OFFSET TO STR ID(USES VID,REALLY)
PUSHJ P,STRCHK ;GO CHECK IT
BC111X: POP P,P4 ;GET CHARACTERISTICS BACK
TLNE P4,E.LALL ;WANTS ALL?
POPJ P,0 ;OK
TLNN P4,E.LNXM ;HOW ABOUT NXM
JRST BC111E ;NO-CHECK PARITY
HRRZ T1,MASKON ;GET CONTROLLER TYPE
CAIE T1,..RH10 ;RH10?
JRST BC111D ;NO
MOVE T2,WKBUFF+MB%CNI ;YES-GET CONI WORD
TLNE T2,1B35 ;NXM ON? (BIT 17)
POPJ P,0 ;YES;LIST IT
JRST BC111E ;NO-CHECK PARITY
BC111D: CAIN T1,..RH11 ;RH11? [600]
JRST [ MOVE T2,WKBUFF+MB%S2I ;RH11 CONTROL & STATUS 2
TRNE T2,1B24 ;NXM?
POPJ P,0 ;YES! - LIST IT
JRST .+1 ] ;NO! - CONTINUE
MOVE T2,WKBUFF+MB%CS1 ;GET CHAN STATUS 1 [547]
TLNE T2,1B22 ;NXM? [547]
POPJ P,0 ;YES! - LIST IT
BC111E: TLNN P4,E.LPAR ;CARE ABOUT PARITY ERRORS?
JRST ABORT ;NO THAT'S ALL I COVER
MOVE T1,MDEDTP ;GET DEVICE TYPE
HLRZ T1,PAR111(T1) ;GET DISPATCH ADDRESS
PJRST @T1 ;DISPATCH TO ROUTINE [607]
BC111F: HRRZ T2,WKBUFF+MB%REG+2 ;ERROR REG
TRNE T2,1B32 ;PARITY SET?
POPJ P,0 ;LIST IT
JRST BC111J ;NO-CHECK CONTROLLER
BC111G: HRRZ T2,WKBUFF+MB%REG+2 ;ERROR REG
TRNE T2,1B29!1B30!1B32 ;THESE ARE POSSIBLE
POPJ P,0
JRST BC111J ;NO
BC111H: HRRZ T2,WKBUFF+MB%REG+2 ;ERROR REG
TRNE T2,1B20!1B27!1B29!1B32 ;CHOICES [601]
POPJ P,0 ;SET-LIST IT
;OR FALL INTO
;HERE TO CHECK PARITY ERRORS DET BY THE CONTROLLER
BC111J: HRRZ T2,WKBUFF+MB%REG ;CONTROL & STATUS 1 [600]
TRNE T2,1B22 ;MCPE?
POPJ P,0 ;YEP! - GO LIST
MOVE T1,MASKON ;KONTROLLER TYPE
CAIE T1,..RH10 ;RH10?
JRST BC111K ;NO
MOVE T2,WKBUFF+MB%CNI
TDNE T2,[1B15!1B16!1B18] ;CHOICES
POPJ P,0 ;LIST IT
JRST ABORT ;FORGET IT
BC111K: TRNE T1,..RH20 ;RH20? [600]
JRST BC111L ;NO!
MOVE T2,WKBUFF+MB%CNI
TDNE T2,[1B18!1B22] ;OTHER CHOICES
POPJ P,0 ;LIST
JRST ABORT ;FORGET IT
BC111L: TRNE T1,..RH11 ;RH11? - HOPE SO! [600]
JRST ABORT ;NO!! - HELP!!!
MOVE T2,WKBUFF+MB%S2I ;CONTROL & STATUS 2
TRNE T2,1B22 ;UPE?
POPJ P,0 ;YES! - LIST
MOVE T2,WKBUFF+MB%UBI ;UBA STATUS
TRNE T2,1B20 ;BUS PARITY ERR?
POPJ P,0 ;YUP! - LIST
JRST ABORT ;NO! - FORGET IT
;PAR111 - DISPATCH TABLE FOR PARITY BIT-CHECK ROUTINES AND FOR
; ERROR BIT SUMMARY ROUTINES FOR DEVICES IN A 111 ENTRY
; PARITY CHECK,,BIT SUMMARY (ADDED WITH EDIT [607]
;
;THIS TABLE MUST BE KEPT IN LINE WITH THE UNIT TYPE TABLE IN
; THE UNIVERSAL FILE. IN PARTICULAR THERE MUST BE AT LEAST
; ".UTMAX" ITEMS IN THE TABLE.
PAR111: 0
XWD BC111H,S111C ;RP04
XWD BC111F,S111A ;RS04
XWD BC111G,S111B ;TU45
XWD BC111G,S111B ;TU16
XWD BC111H,S111C ;RP05
XWD BC111H,S111C ;RP06
XWD ABORT,SUMDUM ;TU70 (RP07???)
XWD ABORT,SUMDUM ;DX20 (RP08???)
XWD BC111H,S111D ;RM03
XWD ABORT,SUMDUM ;TM03
XWD ABORT,SUMDUM ;TU77
XWD ABORT,SUMDUM ;TM78
XWD ABORT,SUMDUM ;TU78
BCK112: MOVE P1,ERTYPE
MOVE P2,ENTCHR(P1) ;CHARACTERISTICS OF ENTRY
;NOT NOW; PUSH P,P2 ;SAVE P2
TLNE P2,E.LSUM ;WANT SUMMARY?
PUSHJ P,SUM112 ;GO DO IT
TLNN F,F.TRY ;RETRY? [510]
JRST BC112A ;NO! - SKIP [510]
HRRZ T1,WKBUFF+DX%FES;GET # OF RETRIES [510]
CAMG T1,RETRY ;ENTRY VALUE GREATER? [510]
JRST ABORT ;NO! - DON'T LIST [510]
BC112A: TLNN F,F.DEV ;EDIT 211 - SAID /DEV:?
JRST BC112B ;NO GO AROUND
MOVE T1,[SIXBIT/DX20/]
CAME T1,DEV ;MATCH?
JRST ABORT ;NOPE!
TLNE F,F.OSUM ;ANY TYPE SWITCH SPECIFIED?
TLO P2,E.LALL ;NO FORCE LISTING
BC112B: TLNE P2,E.LALL ;LIST ALL?
POPJ P,0 ;YES
TLNE P2,E.LPER ;LIST PERFORMANCE
POPJ P,0 ;YES
JRST ABORT ;THAT'S ALL TO CHECK
BCK130: MOVE T1,WKBUFF+FE%LTH ;GET # OF 8 BIT BYTES
LSH T1,-1 ;T1/2 = # OF 11 WORDS
MOVEM T1,PAKSIZ
HRRZ P1,WKBUFF+FE%COD
CAIN P1,200 ;RELOADED?
PUSHJ P,KLE200 ;ACCOUNT FOR IT AND SETUP
CAIN P1,201 ;KLERROR FILE PACKET?
PUSHJ P,KLE201 ;EXCUSE ME FOR A WHILE
MOVE P1,ERTYPE
MOVE P2,ENTCHR(P1) ;CHARACTERISTICS OF ENTRY
PUSH P,P2 ;SAVE P2
TLNE P2,E.LSUM ;WANT SUMMARY?
PUSHJ P,SUM130 ;GO DO IT
POP P,P2 ;RESTORE P2
TLNN F,F.DEV ;SAID /DEV:?
JRST BC130A ;NOPE
HRRZ T1,WKBUFF+FE%COD ;DEVICE CODE
CAILE T1,^D256 ;MAX I RECOGNIZE
JRST BC130B ;OPPS
CAIL T1,200 ;HARDWARE DEVICE?
JRST BC130C ;NOPE
MOVE T1,FE$NAM(T1) ;NOW IN SIXBIT
CAME T1,DEV
JRST ABORT ;NO MATCH
TLNE F,F.OSUM ;ANY TYPE SWITCH CALLED?
TLO P2,E.LALL ;NO-FORCE LISTING
BC130A: TLNE P2,E.LALL ;LIST ALL?
POPJ P,0 ;YES
TLNE P2,E.LPER ;LIST PERFORMANCE
POPJ P,0 ;YES
HRRZ T2,WKBUFF+FE%COD
CAIE T2,200 ;RELOAD?
JRST ABORT ;NOPE
MOVE T1,SWITCH ;GET ADDR OF COMMAND USED
CAIE T1,CPUPER ;"/CPUPER"?
JRST ABORT ;NOPE
POPJ P,0 ;YUP
BC130B: WARN <UNKNOWN DEV TYPE FOUND IN CODE 130 ENTRY-ABORTING ENTRY>
JRST ABORT
BC130C: SUBI T1,200 ;REMOVE OFFSET
MOVE T1,FEHNAM(T1) ;A HIGHER NAME
CAME T1,DEV ;MATCH?
JRST BC130D ;CHECK FURTHER
TLNE F,F.OSUM ;ANY LISTING CALLED FOR?
TLO P2,E.LALL ;NO-FORCE LISTING
JRST BC130A ;AND CONTINUE
BC130D: HRRZ T2,WKBUFF+FE%COD
CAIE T2,201 ;KLERR?
JRST ABORT ;NOPE
MOVE T1,FEHNAM ;GET SIXBIT "KLCPU"
CAME T1,DEV ;MATCH
JRST ABORT
TLNE F,F.OSUM
TLO P2,E.LALL ;FORCE AS ABOVE
JRST BC130A ;AND CONTINUE
BCK131: MOVE P1,ERTYPE
MOVE P2,ENTCHR(P1) ;CHARACTERISTICS OF ENTRY
PUSH P,P2 ;SAVE P2
TLNE P2,E.LSUM ;WANT SUMMARY?
PUSHJ P,SUM131 ;GO DO IT
POP P,P2 ;RESTORE P2
TLNN F,F.DEV ;EDIT 211-SAID /DEV:?
JRST BC131A ;NO GO AROUND
MOVE T1,[SIXBIT/11CPU/]
CAME T1,DEV ;MATCH?
JRST ABORT ;NOPE!
TLNE F,F.OSUM ;ANY TYPE SWITCH SPECIFIED?
TLO P2,E.LALL ;NO FORCE LISTING
BC131A: TLNE P2,E.LALL ;LIST ALL?
POPJ P,0 ;YES
TLNE P2,E.LPER ;LIST PERFORMANCE
POPJ P,0 ;YES
JRST ABORT ;THAT'S ALL TO CHECK
BCK160: MOVE P1,ERTYPE
MOVE P2,ENTCHR(P1) ;CHARACTERISTICS OF ENTRY
PUSH P,P2 ;SAVE P2
TLNE P2,E.LSUM ;WANT SUMMARY?
PUSHJ P,SUM160 ;GO DO IT
POP P,P2 ;RESTORE P2
TLNN F,F.DEV ;EDIT 211-SAID /DEV:?
JRST BC160A ;NO GO AROUND
MOVE T1,[SIXBIT/CPU/]
CAME T1,DEV ;MATCH?
JRST ABORT ;NOPE!
TLNE F,F.OSUM ;ANY TYPE SWITCH SPECIFIED?
TLO P2,E.LALL ;NO FORCE LISTING
BC160A: TLNE P2,E.LALL ;LIST ALL?
POPJ P,0 ;YES
TLNE P2,E.LPER ;LIST PERFORMANCE
POPJ P,0 ;YES
JRST ABORT ;THAT'S ALL TO CHECK
BCK162: ; [614]
BCK161: MOVE P1,ERTYPE
MOVE P2,ENTCHR(P1) ;CHARACTERISTICS OF ENTRY
PUSH P,P2 ;SAVE P2
TLNE P2,E.LSUM ;WANT SUMMARY?
PUSHJ P,SUM161 ;GO DO IT
POP P,P2 ;RESTORE P2
TLNN F,F.DEV ;EDIT 211-SAID /DEV:?
JRST BC161A ;NO GO AROUND
MOVE T1,[SIXBIT/KLCPU/]
CAME T1,DEV ;MATCH?
JRST ABORT ;NOPE!
TLNE F,F.OSUM ;ANY TYPE SWITCH SPECIFIED?
TLO P2,E.LALL ;NO FORCE LISTING
BC161A: TLNE P2,E.LALL ;LIST ALL?
POPJ P,0 ;YES
TLNE P2,E.LPER ;LIST PERFORMANCE
POPJ P,0 ;YES
JRST ABORT ;THAT'S ALL TO CHECK
SUM101:
SUM112:
SUM131:
SUM160:
SUM161:
SUM162:
SUMDUM: POPJ P,0 ;DUMMY SUMMARY ROUTINE
SUM102: MOVE T2,WKBUFF+BG%NAM ;
MOVEI T1,BG%WHY ;INIT POINTER
BG%FND: HLRZ T3,(T1) ;GET POINTER TO NEXT
JUMPE T3,BG%NEW ;EXIT IF NO REASON
MOVEI T1,(T3) ;SETUP POINTER
CAME T2,1(T1) ;IS THIS THE ENTRY?
JRST BG%FND ;NO,GET NEXT
AOS T3,(T1) ;BUMP
TRNN T3,-1 ;BUT
SOS (T1) ;NOT TOO MUCH(OVERFLOW)
POPJ P,0
BG%NEW: AOS T3,.JBFF## ;NEXT POSITION
AOS .JBFF## ;CLEAN HOUSE
CAMG T3,.JBREL## ;IS THERE ROOM?
JRST BG%INS ;YES INSERT REASON
MOVE T4,T3 ;DIFFERENT AC
CORE T4, ;GET MORE CORE
FATAL <SYRNCA: NO CORE AVAILABLE> ;OPPS
BG%INS: MOVEM T2,(T3) ;SAVE REASON
ADDI T3,-1 ;INITIAL COUNT AND ADDRESS
HLRZM T3,(T3) ;SET COUNT TO ONE
HRLM T3,(T1) ;POINT TO THIS BLOCK
POPJ P,0 ;AND LEAVE
;REWRITTEN TO ALLOW FOR MORE THAN ONE WORD TO BE SUMMED FOR RH11 [600]
SUM111: MOVE P3,WKBUFF+MB%IRS ;GET STATUS WORD
TLZ P3,1B19 ;START CLEAN
TLNE P3,1B20 ;HARD ERROR?
TLO P3,1B19 ;SAY SO
MOVE P2,MASIND ;INDEX TO DEVICE
MOVE P2,DEVDS2(P2) ;GET COUNTER ADDRESS
MOVE P1,WKBUFF+MB%CNI ;CONI WORD (C & S #1 FOR RH11)
MOVE T1,MASKON ;TYPE CONTROLLER SAVED BY MDECHR
MOVEM T1,KONTYP
PUSHJ P,MASSVM ;LET IT WORK
MOVE T1,MASKON ;GET CONTROLLER TYPE
CAIE T1,..RH11 ;RH11? (USES 3 WORDS)
JRST S111 ;NO! - NO MORE
ADD P2,[NUMR11,,NUMR11] ;ADVANCE POINTER FOR 2ND WORD
MOVE P1,WKBUFF+MB%S2I ;RH11 C & S #2
MOVEI T1,53 ;OFFSET FOR C&S2
MOVEM T1,KONTYP ;SAVE IT
PUSHJ P,MASSVM ;TALLY
ADD P2,[NUMCS2,,NUMCS2] ;ADVANCE POINTER FOR 3RD WORD
MOVE P1,WKBUFF+MB%UBI ;UBA STATUS REG.
MOVEI T1,14 ;OFFSET FOR UBA STAT
MOVEM T1,KONTYP ;SAVE IT
PUSHJ P,MASSVM ;TALLY
;START SUMMING DEVICE ERROR REGISTERS
S111: MOVE T1,MDEDTP ;GET DEVICE TYPE
HRRZ T1,PAR111(T1) ;GET DISPATCH ADDRESS
PJRST @T1 ;DISPATCH TO ROUTINE [607]
;HERE FOR RS04
S111A: MOVE P2,MASIND ;GET OFFSET FOR THIS DEV
MOVE P2,MASDS2(P2) ;COUNTER ADDRESSES
HRLZ P1,WKBUFF+MB%REG+2 ;WORD TO SUMMATE ERROR REG
MOVEI T1,25 ;OFFSET FOR RS04 ERROR REG
MOVEM T1,KONTYP
PJRST MASSVM
;HERE FOR TU16, TU45
S111B: MOVE P2,MASIND ;GET OFFSET FOR THIS DEV
MOVE P2,MASDS2(P2) ;COUNTER ADDRESSES
HRLZ P1,WKBUFF+MB%REG+2 ;WORD TO SUMMATE
MOVEI T1,27 ;OFFSET FOR TU16 ERROR REG
MOVEM T1,KONTYP
PJRST MASSVM
;HERE FOR RP04, RP05, RP06
S111C: MOVE P2,MASIND ;GET OFFSET FOR THIS DEV
MOVE P2,MASDS2(P2) ;COUNTER ADDRESSES
HRLZ P1,WKBUFF+MB%REG+2 ;WORD TO SUMMATE
MOVEI T1,21 ;OFFSET FOR RP04 ERROR REG #1
MOVEM T1,KONTYP
PUSHJ P,MASSVM
ADD P2,[NURP02,,NURP02] ;ADVANCE POINTER FOR 2ND WORD
HRLZ P1,WKBUFF+MB%REG+14 ;2ND WORD - RP04 ERROR REG #2
AOS KONTYP ;KONTYP=22
PUSHJ P,MASSVM
ADD P2,[NURP10,,NURP10] ;ADVANCE POINTER FOR 3RD WORD
HRLZ P1,WKBUFF+MB%REG+15 ;3RD WORD - RP04 ERROR REG #3
AOS KONTYP ;=23
PJRST MASSVM ;TALLY AND FINISH
;HERE FOR RM03 [601]
S111D: MOVE P2,MASIND ;GET OFFSET FOR THIS DEV
MOVE P2,MASDS2(P2) ;COUNTER ADDRESSES
HRLZ P1,WKBUFF+MB%REG+2 ;WORD TO SUMMATE (ER1)
MOVEI T1,21 ;OFFSET FOR RM03 ERROR REG 1
MOVEM T1,KONTYP
PUSHJ P,MASSVM
ADD P2,[NURP02,,NURP02] ;ADVANCE POINTER FOR 2ND WORD
HRLZ P1,WKBUFF+MB%REG+15 ;2ND WORD
MOVEI T1,56 ;OFFSET FOR RM03 ERROR REG 2
MOVEM T1,KONTYP
PJRST MASSVM ;TALLY AND FINISH
SUM130: HRRZ T2,WKBUFF+FE%COD ;GET DEVICE CODE
CAILE T2,^D256 ;IN RANGE?
JRST BC130B ;NOPE
CAIL T2,200 ;HARDWARE DEVICE
JRST SUM13A
CAILE T2,11 ;CURRENT LIMIT
MOVEI T2,11 ;SAY UNKNOWN
AOS NUM130(T2) ;BUMP COUNTER
POPJ P,0 ;AND GO BACK
SUM13A: SUBI T2,200 ;REMOVE OFFSET
AOS NUH130(T2) ;BUMP & GO
POPJ P,0
;SUMUPD -- SUBROUTINE TO AUTOMATICALLY UPDATE ALL PERMANENT
;SUMMARY COUNTERS PRIOR TO SUMMARY LISTING
;A DUMMY MACRO DUMFLG IS USED TO GENERATE
;THE NECESSARY CODE AS FOLLOWS
;SKIPE T1,XXXTMP ;PICKUP TEMP COUNTER
;ADDM T1,XXXPER ;INCREMENT PERM COUNTER
;DO NEXT COUNTER SAME.......
;modified by edit #110
DEFINE TBLFLG(A)<
setz t1,
exch t1,a'tmp
ADDM T1,A'PER
>
;NOW THE ACTUAL CODE GENERATION
; XLIST
SUMUPD: DUMFLG
LIST
;NOW GENERATE THE SOFTWARE SUMMARY COUNTERS UPDATE
;also modified by edit #110
DEFINE DUMDV(A)<
ZZ==0
REPEAT NUMSFB,<
setz t1,
exch t1,a'st+zz
ADDM T1,A'SP+ZZ
ZZ==ZZ+1
>>
; XLIST
; DUMDP
; DUMFH
; DUMRP
LIST
XLIST
DUMDP
DUMFH
DUMRP
LIST
POPJ P, ;RETURN
SUBTTL STORAGE LOCATIONS
DUMDAY: 121165 ;DUMMY NBS DAY FOR USE BY SCAN
KONMSK: 0 ;MASK FOR ERROR BITS IN RC10 TYPE DEVICE
0 ;MASK FOR ERROR BITS IN RP10 TYPE DEVICE
SFMASK ;SOFTWARE DETECTED ERROR MASK
TMMASK
RHMASK
RH20SK
DXMASK
TCMASK
DL1MSK
DL2MSK
KLAMSK
RH11SK ;RH11 CONTROL & STATUS 1 [600]
UBAMSK ;UBA STATUS [600]
0
0
0
P4SRSK
P4ERSK
P4CBSK
P4DASK
S4SRSK
S4ERSK
T6SRSK
T6ERSK
ICPCSK
DXTBSK
SB03SK
SB47SK
RP05SK
RP06SK
FESTSK
FELPSK
LPSASK
LPSBSK
FECDSK
CDSTSK
RHSWSK
RLD1SK
FEKLSK
RPMRSK
DXSRSK
DXERSK
DXMRSK
CS2MSK ;RH11 CONTROL & STATUS #2 [600]
RMM1SK ;RM03 MAINT REG 1 [601]
RMM2SK ;RM03 MAINT REG 2 [601]
RME2SK ;RM03 ERROR REG 2 (15) [601]
MINERB: 0
0
MINSFB
MINTMB
MINRHB
MINRH2
MINDXB
MINTCB
MINDL1
MINDL2
MINKLA
MINR11
MINUBA
0
0
0
MIRP01
MIRP02
MIRP10
MIRP15
MIRS01
MIRS02
MIT601
MIT602
MIICPC
MIDXTB
MISB03
MISB47
MIRP05
MIRP06
MIFEST
MIFELP
MILPSA
MILPSB
MIFECD
MICDST
MIRHSW
MIRLD1
MIFEKL
MIRPMR
MIDXSR
MIDXER
MIDXMR
MINCS2
MINMR1
MINMR2
MINER2
ERINDX: 0
0
0 ;SFINDX
0 ;TMINDX
RHINDX
RH20DX
0 ;DXINDX
0 ;TCINDX
0 ;DL1IND
0 ;DL2IND
KLAIND
RH11DX
UBADX
0 ;0
0 ;0
0 ;0
RP01DX
RP02DX
RP10DX
RP15DX
RS01DX
RS02DX
T601DX
T602DX
0 ;ICPCDX
0 ;DXTBDX
SB03DX
SB47DX
RP05DX
RP06DX
FESTDX
FELPDX
LPSADX
LPSBDX
FECDDX
CDSTDX
RHSWDX
RLD1DX
FEKLDX
RPMRDX
DXSRDX
DXERDX
DXMRDX
CS2DX
RMR1DX
RMR2DX
RME2DX
IDVFLT: SIXBIT/SYS/ ;DEFAULT FILE SPECIFICATIONS
IFLFLT: SIXBIT/ERROR/
IEXFLT: SIXBIT/SYS/
ODVFLT: SIXBIT/DSK/
OFLFLT: SIXBIT/ERROR/
OEXFLT: SIXBIT/LST/
PDLPNT: IOWD LPDL,PDLST
SUBTTL DUMMY MACRO EXPANSION AREA
;THE FOLLOWING MACRO CODE UTILIZES THE PRINCIPLE OF THE DUMMY
;MACRO USED EARLIER AND REDEFINES TBLENT TO GENERATE VAIOUS
;NECESSARY DISPATCH TABLES
;MACRO TO CREATE A TABLE CONTAINING OFFSET INTO OTHER TABLES
;WHICH WERE PREVIOUSLY INDEXED BY ERROR TYPE(VER 3 & EARLIER). ALLOWS
;HOLES TO BE IN SEQUENCE OF ERROR TYPES WHICH ARE USED.
;THIS FIRST TABLE CONTAINS ALL THE ERROR TYPES
;KNOWN TO ALL SYSERR PARTS. THE SECOND IS THE TABLE
;OF TYPES PROCESSED BY THE SEGMENT.
;EDIT #120.
SALL
DEFINE TBLENT(A,B,C,D,E)<
XWD 0,A
>
ALLTBL: DUMENT
ALLLTH=<.-1>-ALLTBL+1 ;LENGTH OF ERROR INDEX TABLE
DEFINE TBLENT(A,B,C,D,E)<
IFIDN<D><PROCSD><
XWD 0,A
>>
ERRTBL: 0 ;FIRST FOUND MUST NOT BE 0
DUMENT
ERRLTH=<.-1>-ERRTBL+1 ;LENGTH OF ERROR INDEX TABLE
;THE ENTRY PROCESSING TABLE
;THIS TABLE MUST BE INDEXED BY THE CONTENTS OF ERTYPE
DEFINE TBLENT(A,B,C,D,E)<
IFIDN<D><PROCSD><
XWD C,D
TYPMAX==A>
IFDIF<D><PROCSD><
XWD 0,D
TYPMAX==A>
>
PCSTBL: DUMENT
;GENERATE THE VARIOUS ASCIZ MESSAGES TO BE USED FOR HEADER
;ENTRY TYPE IDENTIFICATION
;FORMAT WILL BE MESS(#) WHERE MESS IS THE ENTRY TYPE
;DESCRIPTION AND # IS THE ERROR TYPE
DEFINE TBLENT(A,B,C,D,E)<
IFIDN<D><PROCSD><
[ASCIZ/B/]
>>
;GENERATE THE TEXT
TYPMES: 0
DUMENT
LIST
;END OF ENTRY DESCRIPTOR GENERATOR
;GENERATE THE DISPATCH TABLE TO ENTRY SUMMATION AND BIT CHECK ROUTINES
;ALL WILL RETRN VIA POPJ P,
;TABLE IS INDEXED BY ERROR TYPE CODE
DEFINE TBLENT(A,B,C,D,E)<
IFIDN<D><PROCSD><
IFDIF<B><UNKNOWN TYPE>,< XWD 0,BCK'A>
IFIDN<B><UNKNOWN TYPE>,< XWD 0,[POPJ P,]>
>>
;GENERATE THE TABLE
BITCHK: 0
DUMENT
;GENERATE THE TABLE OF LINE COUNTS FOR OUTPUT LISTING
DEFINE TBLENT(A,B,C,D,E)<
IFIDN<D><PROCSD><
XWD 0,E
>>
RADIX 10
LINE: 0
DUMENT
RADIX 8
;GENERATE THE VARIOUS ENTRY CONTROL TABLES USING THE MACRO TBLWRD
;TO GENERATE TABLES
DEFINE TBLWRD(A,B,C,D,E,F)<
IFDIF<D><SPECL>,< BYTE (6)B,C,D(18)T'A'E>
IFIDN<D><SPECL>,< BYTE (6)B,C,D(18)F>
>
RADIX 10 ;*********NOTE WELL***********
.CT101: DUM101
Z
.CT102: DUM102
Z
.CT111: DUM111
Z
.CT112: DUM112
Z
.CT130: DUM130
Z
.CT131: DUM131
Z
.CT160: DUM160
Z
.CT161: DUM161
Z
.CT162: DUM162
Z
RADIX 8
;END OF ENTRY TABLE GENERATION
;GENERATE THE NECESSARY ASCIZ TEXT FOR NON-SPECIAL ROUTINES
DEFINE TBLWRD(A,B,C,D,E,F)<
IFDIF <D><SPECL>,<
T'A'E: ASCIZ/
F/
>>
;WHAT IS XLISTED IS THE DUMALL CALL AND FOLOWING CODE.
XLIST
DUMALL
LIST
;END OF ASCIZ TEXT MACRO EXPANSION
;SWITCH TABLES
;THE FOLLOWING TABLES WILL BE GENERATED VIA THE DUMMY MACRO
;DUMCH1
;THE FIRST IS A DISPATCH TABLE TO BYTES REPRESENTING BITS TO SET
;IN THE ENTCHR TABLE
;NEXT IS THE ACTUAL BYTES THEMSELVES
;TABLE FOR DISPATCH TO THE BYTE OPERANDS
DEFINE TBLCH1(A,B,C,D,E,F,G)<
XWD 0,BYT'G
>
;MAKE DISPATCH TABLE
BYTDSP: DUMCH1
;NOW THE BYTES THEMSELVES
DEFINE TBLCH1(A,B,C,D,E,F,G)<
BYT'G: BYTE (6) B,77,C,77,D,77,E,77,F,77
>
DUMCH1
;SWITCH MACRO EXPANSION NEXT
;DEFINE THE SWITCHES WE RECOGNIZE
DEFINE TBLCH1(A,B,C,D,E,F,G)<
SS (A,A,0)
>
DEFINE TBLCH2(A,B,C)<
SP (A,A,B,C)
>
;CALL A MACRO TO SETUP DEFAULTS
DEFVAL
;NOW MAKE SWTCHS MACRO FOR USE WITH DOSCAN LATER
DEFINE SWTCHS<
DUMCH1
DUMCH2
>
DOSCAN(SWTAB)
;GENERATE THE CONI BIT TEXT AND ADDRESS DISPATCHER
RADIX 10 ;****** NOTE WELL *****
SALL
DEFINE TBLDEV(A,B)<
[ASCIZ\B',\]
>
SOFTDV: DUMSF1
TM10DV: DUMTM1
RH10DV: DUMRH1
RH20DV: DUMRH2
DX10DV: DUMDX1
TC10DV: DUMTC1
DL10DV: DUMDL1
DL11DV: DUMDL2
KL1ADV: DUMKLA
RH11DV: DUMR11
UBADV: DUMUBA
;15
;16
;17
RP04SR: DURP01
RP04ER: DURP02
RP04CB: DURP10
RP04DA: DURP15
RS04SR: DURS01
RS04ER: DURS02
TU16SR: DUT601
TU16ER: DUT602
ICPCX1: DUICPC
DXTAGB: DUDXTB
DXSB03: DUSB03
DXSB47: DUSB47
RP05DV: DURP05
RP06DV: DURP06
FESTDV: DUFEST
FELPDV: DUFELP
LPSADV: DULPSA
LPSBDV: DULPSB
FECDDV: DUFECD
CDSTDV: DUCDST
RHSWDV: DURHSW
RLD1DV: DURLD1
FEKLDV: DUFEKL
RPMRDV: DURPMR
DXSRDV: DUDXSR
DXERDV: DUDXER
DXMRDV: DUDXMR
CS2DV: DUMCS2
RM3MR1: DURMR1
RM3MR2: DURMR2
RM3ER2: DURER2
;57
;60
SB81DV: DUSB81
;NOW GENERATE THE ERROR BIT VS INDEX BIT TABLES
;USING THE TBLDEV MACRO
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RHINDX+A-MINRHB
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RHINDX: REPEAT 36-MINRHB,<0>
ZZ==0
DUMRH1
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RH20DX+A-MINRH2
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RH20DX: REPEAT 36-MINRH2,<0>
ZZ==0
DUMRH2
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC KLAIND+A-MINKLA
ZZ
ZZ==ZZ+1
RELOC ZZP
>
KLAIND: REPEAT 36-MINKLA,<0>
ZZ==0
DUMKLA
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RH11DX+A-MINR11
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RH11DX: REPEAT 36-MINR11,<0>
ZZ==0
DUMR11
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC UBADX+A-MINUBA
ZZ
ZZ==ZZ+1
RELOC ZZP
>
UBADX: REPEAT 36-MINUBA,<0>
ZZ==0
DUMUBA
;15
;16
;17
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RP01DX+A-MIRP01
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RP01DX: REPEAT 36-MIRP01,<0>
ZZ==0
DURP01
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RP02DX+A-MIRP02
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RP02DX: REPEAT 36-MIRP02,<0>
ZZ==0
DURP02
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RP10DX+A-MIRP10
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RP10DX: REPEAT 36-MIRP10,<0>
ZZ==0
DURP10
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RP15DX+A-MIRP15
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RP15DX: REPEAT 36-MIRP15,<0>
ZZ==0
DURP15
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RS01DX+A-MIRS01
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RS01DX: REPEAT 36-MIRS01,<0>
ZZ==0
DURS01
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RS02DX+A-MIRS02
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RS02DX: REPEAT 36-MIRS02,<0>
ZZ==0
DURS02
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC T601DX+A-MIT601
ZZ
ZZ==ZZ+1
RELOC ZZP
>
T601DX: REPEAT 36-MIT601,<0>
ZZ==0
DUT601
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC T602DX+A-MIT602
ZZ
ZZ==ZZ+1
RELOC ZZP
>
T602DX: REPEAT 36-MIT602,<0>
ZZ==0
DUT602
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC SB03DX+A-MISB03
ZZ
ZZ==ZZ+1
RELOC ZZP
>
SB03DX: REPEAT 36-MISB03,<0>
ZZ==0
DUSB03
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC SB47DX+A-MISB47
ZZ
ZZ==ZZ+1
RELOC ZZP
>
SB47DX: REPEAT 36-MISB47,<0>
ZZ==0
DUSB47
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RP05DX+A-MIRP05
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RP05DX: REPEAT 36-MIRP05,<0>
ZZ==0
DURP05
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RP06DX+A-MIRP06
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RP06DX: REPEAT 36-MIRP06,<0>
ZZ==0
DURP06
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC FESTDX+A-MIFEST
ZZ
ZZ==ZZ+1
RELOC ZZP
>
FESTDX: REPEAT 36-MIFEST,<0>
ZZ==0
DUFEST
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC FELPDX+A-MIFELP
ZZ
ZZ==ZZ+1
RELOC ZZP
>
FELPDX: REPEAT 36-MIFELP,<0>
ZZ==0
DUFELP
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC LPSADX+A-MILPSA
ZZ
ZZ==ZZ+1
RELOC ZZP
>
LPSADX: REPEAT 36-MILPSA,<0>
ZZ==0
DULPSA
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC LPSBDX+A-MILPSB
ZZ
ZZ==ZZ+1
RELOC ZZP
>
LPSBDX: REPEAT 36-MILPSB,<0>
ZZ==0
DULPSB
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC FECDDX+A-MIFECD
ZZ
ZZ==ZZ+1
RELOC ZZP
>
FECDDX: REPEAT 36-MIFECD,<0>
ZZ==0
DUFECD
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC CDSTDX+A-MICDST
ZZ
ZZ==ZZ+1
RELOC ZZP
>
CDSTDX: REPEAT 36-MICDST,<0>
ZZ==0
DUCDST
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RHSWDX+A-MIRHSW
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RHSWDX: REPEAT 36-MIRHSW,<0>
ZZ==0
DURHSW
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RLD1DX+A-MIRLD1
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RLD1DX: REPEAT 36-MIRLD1,<0>
ZZ==0
DURLD1
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC FEKLDX+A-MIFEKL
ZZ
ZZ==ZZ+1
RELOC ZZP
>
FEKLDX: REPEAT 36-MIFEKL,<0>
ZZ==0
DUFEKL
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RPMRDX+A-MIRPMR
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RPMRDX: REPEAT 36-MIRPMR,<0>
ZZ==0
DURPMR
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC DXSRDX+A-MIDXSR
ZZ
ZZ==ZZ+1
RELOC ZZP
>
DXSRDX: REPEAT 36-MIDXSR,<0>
ZZ==0
DUDXSR
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC DXERDX+A-MIDXER
ZZ
ZZ==ZZ+1
RELOC ZZP
>
DXERDX: REPEAT 36-MIDXER,<0>
ZZ==0
DUDXER
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC DXMRDX+A-MIDXMR
ZZ
ZZ==ZZ+1
RELOC ZZP
>
DXMRDX: REPEAT 36-MIDXMR,<0>
ZZ==0
DUDXMR
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC CS2DX+A-MINCS2
ZZ
ZZ==ZZ+1
RELOC ZZP
>
CS2DX: REPEAT 36-MINCS2,<0>
ZZ==0
DUMCS2
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RMR1DX+A-MINMR1
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RMR1DX: REPEAT 36-MINMR1,<0>
ZZ==0
DURMR1
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RMR2DX+A-MINMR2
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RMR2DX: REPEAT 36-MINMR2,<0>
ZZ==0
DURMR2
DEFINE TBLDEV(A,B)<
ZZP==.
RELOC RME2DX+A-MINER2
ZZ
ZZ==ZZ+1
RELOC ZZP
>
RME2DX: REPEAT 36-MINER2,<0>
ZZ==0
DURER2
;57
;60
;NOW GENERATE THE ERROR BIT VS INDEX BIT TABLES
;THIS ALLOWS NON-CONTIGUOUS ERROR BITS IN CONI WORD
;TO BE COUNTED IN CONTIGUOUS COUNTERS
RADIX 8 ; ***** DONE WITH RADIX 10 *****
;GENERATE SIXBIT TABLE OF DEVICE NAMES
DEFINE DUMDV(A)<
SIXBIT/A/
>
NAMTB2:: DUMDVB
NAMLT2=<.-1>-NAMTB2+1 ;LENGTH OF TABLE OF SIXBIT NAMES
;USING SAME DEFINITION OF MACRO NOW GENERATE
;LIST OF ONLY MASSBUS DEVICE NAMES
MASNA2: DUMDVB
MASLT2=<.-1>-MASNA2+1 ;LENGTH OF THIS TABLE
;GENERATE CONI BIT ERROR DISPATCHER
;RH = SOFT ERROR POINTER
;LH = HARD ERROR POINTER
DEFINE DUMDV(A)<
XWD A'HD,A'SF
>
DEVDS2: DUMDVB
DEFINE DUMDV(A)<
XWD A'ST,A'SP
>
;ST=STORAGE TEMP,SP=PERM.
SOFDS2: DUMDVB
;NOW THE DISPATCHER FOR MASSBUS ERROR REGS
; SWAPPED A'DS & A'DH EDIT [600]
DEFINE DUMDV (A)<
XWD A'DH, A'DS
>
MASDS2: DUMDVB
DEVDSP::
MASNAM::
NAMTBL::
MASLTH==0
NAMLTH==0
END STARTD