          EJECT
*         CTEXT  CTP$DFT GENERATE 960 MEMORY FSC
          SPACE  4,10
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC. 1992
          SPACE  4,10
** THIS COMDECK IS TO GENERATE FAULT SYMPTOM CODES FOR ERRORS REPORTED
* FROM THE 960 CENTRAL MEMORY ERROR LOGS.
* THE FOLLOWING FORM GIVES THE PATTERN FOR THE CODES.
*
*(2**N)1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  *
*  24  BF  *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
*  23  *   WP  *   *   *   *   *   *   *   *   *   *   *   *   *   *
*  22  *   *   IF  *   *   *   *   *   *   *   *   *   *   *   *   *
*  21  *   *   E0  *   *   *   *   (8  *   *   *   *   *   *   *   *
*  20  *   *   E1  *   *   *   (7  (8  *   *   *   *   *   *   *   *
*  19  *   *   E2  *   (5  (6  (7  (8  *   *   *   *   *   *   *   *
*  18  *   *   E3  (4  *   (6  (7  (8  *   *   *   *   *   *   *   *
*  17  *   *   *   *   *   *   *   *   RD  *   *   *   *   *   *   *
*  16  *   *   *   *   *   *   *   *   MB  MB  *   *   *   *   *   *
*  15  *   *   *   *   *   *   *   *   *   *   PW  *   *   *   *   *
*  14  *   *   *   *   *   *   *   *   *   *   *   SB  *   *   *   *
*  13  *   *   *   *   *   *   *   *   SS  SS  SS  SS  *   *   *   *
*  12  *   *   *   *   *   *   *   *   MS  MS  MS  MS  *   *   *   *
*  11  *   *   *   *   MP  *   *   *   MS  MS  MS  MS  *   *   *   *
*  10  P0  P0  P0  P0  P0  P0  P0  P0  B0  B0  B0  B0  *   *   *   *
*  09  P1  P1  P1  P1  P1  P1  P1  P1  B1  B1  B1  B1  *   *   *   *
*  08  P2  P2  P2  P2  P2  P2  P2  P2  B2  B2  B2  B2  *   *   *   *
*  07  E0  WB  *   *   ML  *   *   *   RB  RB  PB  SC  *   *   *   *
*  06  E1  WB  *   *   ML  *   *   *   RB  RB  PB  SC  *   *   *   *
*  05  E2  WB  *   *   ML  *   *   *   RB  RB  PB  SC  *   *   *   *
*  04  E3  WB  FC  FC  ML  *   *   *   RB  RB  PB  SC  *   *   *   *
*  03  A0  WB  FC  FC  ML  *   A0  A0  RB  RB  PB  SC  *   *   *   *
*  02  A1  WB  FC  FC  ML  *   A1  A1  RB  RB  PB  SC  *   *   *   *
*  01  A2  WB  FC  FC  ML  *   A2  A2  RB  RB  PB  SC  *   *   *   *
*  00  A3  WB  FP  FP  ML  *   A3  A3  RB  RB  PB  SC  *   *   *   *
*
* (4--ENCODED ERROR = 1 (FUNCTION CODE PE)
* (5--ENCODED ERROR = 2 (MARK LINE PE)
* (6--ENCODED ERROR = 3 (TAG PE)
* (7--ENCODED ERROR = 4-7 (CMC ADDRESS PE)
* (8--ENDODED ERROR = 8-F (CSU ADDRESS PE)
* A0-A3--ADDRESS BYTE PE BYTES 0-3
* B0-B2--BANK SELECT BITS 0-2
* BF - BOUNDS FAULT
* E0-E3--ENCODED ERROR BITS 0-3
* FC--FUNCTION CODE BITS 0-3
* FP--FUNCTION CODE PARITY
* IF--ILLEGAL FUNCTION
* MB--MULTIPLE BIT ERROR
* ML--MARK LINE BITS 0-7
* MP--MARK LINE PARITY BIT
* MS--CM ARRAY MODULE SELECT BIT 0,1
* PB--PARTIAL WRITE DATA BYTE PE BITS 0-7
* RB--READ DATA BYTE PE BITS 0-7
* RD--READ DATA PE
* SB--SINGLE BIT ERROR, IE, CORRECTED ERROR.
* SC--CORRECTED ERROR SYNDROME CODE BITS 0-7
* SS--CM ARRAY MODULE SIDE SELECT BIT
* WB--WRITE BYTE PARITY ERROR BITS 0-7
* WP--WRITE DATA BYTE PE
***
** CURRENT CODE REVISION IS - C -  (14JUN88)     VERSION
          SPACE 1
** EQUATES FOR VARIABLES
I         EQU    T1          TEMPORARY STORE
TEMP      EQU    T2          --MORE VOLATILE CELLS ARE FIRST-
TEMP1     EQU    T3
DEX2      EQU    T4
DEX3      EQU    T5
MSK8      EQU    T6          HOLDS AN 8 BIT MASK
FWAIB     EQU    T7          FWA OF INPUT BUFFER
          SPACE  3
** EQUATES FOR CONSTANTS
MLPEC     EQU    0#2         ERROR CODE FOR MARK LINE PE
D.HSL     EQU    8           HALF SHIFT LEFT 8
D.HSR     EQU    -8          HALF SHIFT RIGHT 8
D.QSR     EQU    -4          QUARTER SHIFT RIGHT 4
D.XF      EQU    0#F         HEX VALUE
D.XA      EQU    0#A         HEX VALUE
D.X30     EQU    0#30        ASCII CODE FOR 0
D.X37     EQU    0#37        ASCII CODE FOR A

** THE FOLLOWING TIES THE COMDECK TOGETHER WITH THE INPUT BUFFER.
A0        EQU    0           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A01       EQU    1           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A02       EQU    2           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A03       EQU    3           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A4        EQU    4           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A41       EQU    5           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A42       EQU    6           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A43       EQU    7           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A8        EQU    8           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A81       EQU    9           LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A82       EQU    10          LOC OF CELL RELATIVE TO FWA OF INPUT BFR
A83       EQU    11          LOC OF CELL RELATIVE TO FWA OF INPUT BFR
MODEL     EQU    12          LOCATION OF CELL RELATIVE TO FWA OF INPUT
          SPACE  3
** RESERVED SPACE/CELLS
ABRT      CON    0           ABORT FLAG
ADPB      CON    0           ADDRESS PARITY ERROR BYTES
FSCBFR    BSSZ   2           TEMPORARY BUFFER
PEBPC     CON    0           PE BYTE POSITION CODE (ENCODED ERROR)

CMFSC     EJECT
***       CMFSC              CM FAULT SYMPTOM CODE GENERATOR
*
*         PURPOSE            TO GENERATE THE LOWER 8 CHARACTERS OF A
*                            FAULT SYMPTOM CODE FOR ERRORS REPORTED IN
*                            THE MEMORY ERROR LOGS.
*
*         METHOD             CHECK ERROR BITS IN A PREDEFINED ORDER AND
*                            GENERATE A CODE BASED ON THE ERROR AND
*                            OTHER SELECTED SUPPORTING DATA FROM THE
*                            ERROR LOGS.
*
*         ENTRY              (A) = FIRST WORD ADDRESS OF A 13 WORD BFR.
*                            THIS BUFFER WILL CONTAIN DATA FROM THE
*                            CM ERROR REGISTERS A0, A4, AND A8. WORD 13
*                            OF THE BUFFER WILL CONTAIN THE MEMORY MODEL
*                            NUMBER.
*
*         EXIT               EXIT WITH FAULT SYMPTOM CODE IN THE FIRST
*                            FOUR WORDS OF THE INPUT BUFFER. THE CODE
*                            WILL BE IN ASCII FORMAT.
*
*         USES               FWAIB, FSCBFR, MSK8, TEMP1
*
*         CALLS              GPC, CAP, GAI, CHW
*
*         MACROS             SUBR

CMFSC     SUBR               SUBROUTINE ENTRY POINT
          STDL   FWAIB       STORE BASE ADDRESS
          STDL   TEMP

* CLEAR STATUS WORDS NOT MARKED AS VALID.
CMFSC02   LDIL   TEMP        LOAD BYTES 0,1 OF STATUS
          SHN    2           POSITION TO SIGN BIT.
          MJN    CMFSC06     IF VALID BIT SET,
          LDN    3           ELSE, CLEAR 8 BYTES(4 WORDS) OF DATA
          STDL   I
CMFSC04   LDN    0
          STIL   TEMP        STORE ZERO TO BUFFER WORD
          AODL   TEMP        INCREMENT BUFFER POINTER
          SODL   I           DECR INDEX COUNT
          PJN    CMFSC04     IF NOT COMPLETE,
          LDDL   TEMP
          UJN    CMFSC08
CMFSC06   LDN    4           LOAD LENGTH OF RGTR DATA WORD
          RADL   TEMP        INCREMENT POINTER
CMFSC08   SBDL   FWAIB       SUBTRACT FWA OF BUFFER.
          SBN    12          SUBTRACT TOTAL LENGTH OF RGTR DATA
          MJN    CMFSC02     IF NOT ALL DATA CHECKED,

          LDN    0
          STML   FSCBFR      CLEAR TEMP BUFFER
          STML   FSCBFR+1
          LDC    0#FF
          STDL   MSK8        PRESET THE MASK VALUE

* LOOK FOR BOUNDS FAULT
          LDML   A8,FWAIB    LOAD A8 BYTE 0,1
          SHN    17-12
          PJN    CMFSC10     IF NOT BOUNDS FAULT,
          LDC    0#100
          STML   FSCBFR      SET BIT 2**24
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A8          ADD OFFSET
          RJM    GPC         GET PORT CODE AND PLACE IN OUT
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A8          ADD OFFSET
          RJM    CAP         GO CHECK ADDRESS PE
          RAML   FSCBFR+1    REPLACE TO OUTPUT CODE
          LDML   A42,FWAIB
          LPN    17B         EXTRACT PEBPC
          SHN    4
          RAML   FSCBFR+1    SAVE ENCODED ERROR.
          LJM    CMFSCC0     GO CONVERT AND EXIT.

* LOOK FOR WRITE DATA PE
CMFSC10   LDML   A43,FWAIB   LOAD A4 BYTE 6,7
          SHN    -8
          STDL   TEMP1
          NJN    CMFSC12     IF WRITE DATA PE BYTE IS NONZERO,
          LDML   A8,FWAIB    LOAD A8 BYTE 0,1
          SHN    17-11
          PJN    CMFSC20     IF NO MULTIPLE BIT ERROR,
          LDDL   FWAIB       LOAD BASE ADDRESS
          ADN    A8          ADD RGTR DATA OFFSET
          UJN    CMFSC16
CMFSC12   LDDL   TEMP1       RETRIEVE THE WRITE DATA PE BYTES
          RAML   FSCBFR+1    ADD TO OUTPUT CODE
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A4          ADD OFFSET
CMFSC16   RJM    GPC         GET THE PORT CODE
          LDC    0#80
          STML   FSCBFR      SET BIT 2**23
          LJM    CMFSCC0     EXIT

* LOOK FOR ILLEGAL FUNCTION
CMFSC20   LDML   A8,FWAIB    LOAD A8 BYTE 0,1
          SHN    17-13
          PJN    CMFSC30     IF NOT ILLEGAL FUNCTION
          LDC    0#40
          STML   FSCBFR      SET BIT 2**22
          LDML   A42,FWAIB   LOAD A4 BYTE 4,5
          LPN    17B         EXTRACT ENCODED ERROR BITS
          SHN    2
          RAML   FSCBFR
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A8          ADD OFFSET
          RJM    GPC         GET PORT CODE
CMFSC25   LDML   A4,FWAIB    LOAD A4 BYTE 0,1
          SHN    -8
          LPN    37B         EXTRACT FUNCTION CODE, PARITY
          RAML   FSCBFR+1
          LJM    CMFSCC0     CONVERT AND EXIT

* LOOK FOR FUNCTION CODE PE
CMFSC30   LDML   A42,FWAIB   LOAD A4 BYTE 4,5
          LPN    17B         EXTRACT ENCODED ERROR BITS
          STML   PEBPC
          SHN    2
          STML   FSCBFR
          LMN    4
          NJN    CMFSC40     IF NOT FUNCTION CODE PE,
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A4          ADD OFFSET
          RJM    GPC         GET PORT CODE
          UJN    CMFSC25     GO GET FUNCTION AND PARITY

* LOOK FOR MARK LINE PARITY ERROR.
CMFSC40   LDML   PEBPC
          LMN    MLPEC
          NJN    CMFSC50     IF NOT MARK LINE PE,
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A4          ADD OFFSET
          RJM    GPC         GET THE PORT CODE
          LDML   A43,FWAIB   LOAD A4 BYTES 6,7
          LPDL   MSK8        EXTRACT THE MARK LINE BITS
          STML   FSCBFR+1
          LDML   A4,FWAIB    LOAD A4 BYTES 0,1
          SHN    -4
          LPN    17B         EXTRACT MARK P AND PORT CODE
          SHN    8
          RAML   FSCBFR+1
          LJM    CMFSCC0     CONVERT AND EXIT

* LOOK FOR TAG PARITY ERROR.
CMFSC50   LDML   PEBPC
          LMN    3
          NJN    CMFSC60     IF NOT TAG PE,
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A4          ADD OFFSET
          RJM    GPC
          LJM    CMFSCC0     CONVERT AND EXIT

* LOOK FOR ENCODED CM ADDRESS PE OR CSU ADDRESS PE
CMFSC60   LDML   PEBPC
          SBN    4
          MJN    CMFSC70     IF LESS THAN 4 (THIS HAS ALREADY BEEN CHEC
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A4          ADD OFFSET
          RJM    CAP         CHECK ADDRESS PARITY VIA REPORT
          RAML   FSCBFR+1
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A4          ADD OFFSET
          RJM    GPC         GET THE PORT CODE
          LJM    CMFSCC0     CONVERT AND EXIT

* LOOK FOR READ DATA PARITY ERROR.
CMFSC70   LDML   A83,FWAIB   LOAD A8 BYTES 6,7
          SHN    -8
          ZJN    CMFSC80     IF NOT READ DATA PE BYTE,
          STML   FSCBFR+1
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A8          ADD OFFSET
          RJM    GAI         GET ARRAY INDEX (D,MS,BANK)
          LDN    2           2**17  MEANS READ DATA PE
          STML   FSCBFR
          LDML   A4,FWAIB    LOAD A4 BYTES 0,1
          SHN    17-12
          LPN    1           EXTRACT MULTIPLE BIT ERROR
          RAML   FSCBFR
          LJM    CMFSCC0     CONVERT AND EXIT

* LOOK FOR MULTIPLE BIT ERROR
CMFSC80   LDML   A4,FWAIB    LOAD A4 BYTES 0,1
          SHN    17-13
          PJN    CMFSC90     IF NOT MULTIPLE BIT ERROR
          LDN    1
          STML   FSCBFR
          LDDL   FWAIB
          ADN    A4
          RJM    GAI         GET ARRAY INDEX FROM A4 RGTR.
          LJM    CMFSCC0     GO CONVERT AND EXIT.

* LOOK FOR PARTIAL WRITE DATA PE
CMFSC90   LDML   A83,FWAIB   LOAD A8 BYTES 6,7
          LPDL   MSK8
          ZJN    CMFSCA0     IF NO PARTIAL WRITE DATA PE,
          STML   FSCBFR+1    STORE DATA PE BITS, (NOT NEED FOR FRU ISOL
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A8          ADD OFFSET
          RJM    GAI         GET ARRAY INDEX
          LDC    0#8000      PARTIAL WRT PE INDICATOR
          RAML   FSCBFR+1
          LJM    CMFSCC0     CONVERT AND EXIT

* LOOK FOR A0 DETECTED ERROR, IE, SINGLE BIT ERROR.
CMFSCA0   LDML   A0,FWAIB    LOAD A0 BYTES 0,1
          SHN    2
          PJN    CMFSCB0     IF A0 RGTR NOT VALID,
          LDDL   FWAIB       LOAD ADDRESS OF BUFFER
          ADN    A0          ADD OFFSET
          RJM    GAI         GET ARRAY INDEX
          LDC    0#4000
          RAML   FSCBFR+1
          LDML   A03,FWAIB   LOAD A0 BYTES 6,7
          SHN    -8          EXTRACT SYNDROME CODE.
          RAML   FSCBFR+1
CMFSCB0   LJM    CMFSCC0     CONVERT AND EXIT

** CONVERT RAW STATUS CODE TO ASCII AND STORE FOR EXIT.
** CAUTION--NOTE THAT TEMP, AND TEMP1 ARE USED BY ROUTINE CHW.
CMFSCC0   EQU    *
          LDML   ABRT
          ZJN    CMFSCC1     IF NO ABORT FLAG,
          LDN    0           ELSE, ZERO THE SYMPTOM CODE
          STML   FSCBFR
          STML   FSCBFR+1
CMFSCC1   LDML   FSCBFR      LOAD BYTE 0,1 OF RAW FSC
          RJM    CHW         CONVERT TO ASCII
          STML   0,FWAIB     STORE TO BUFFER FOR OUTPUT
          LDDL   DEX3
          STML   1,FWAIB
          LDML   FSCBFR+1    LOAD BYTE 2,3 OF RAW FSC
          RJM    CHW         CONVERT TO ASCII
          STML   2,FWAIB
          LDDL   DEX3
          STML   3,FWAIB
          LJM    CMFSCX      EXIT FAULT CODE GENERATOR.

CAP       EJECT
***       CAP                CHECK ADDRESS PARITY
*
*         METHOD             EXTRACT THE ADDRESS PRESENTED BY THE
*                            ERROR LOG AND GENERATE THE EXPECTED
*                            PARITY FOR THAT ADDRESS.  COMPARE THE
*                            GENERATED ADDRESS WITH THE ADDRESS PARITY
*                            REPORTED IN THE ERROR LOG.  EXIT WITH THE
*                            DIFFERENCE BITS IN -A-.
*
*         INPUT              (A)= FWA OF THE ERROR LOG DATA OF INTEREST
*
*         EXIT               (ADPB )= ADDRESS BYTE PARITY
*                            (A) = ADDRESS BYTE PARITY ERRORS.
*
*         USES               TEMP1, TEMP, ADPB , DEX3,
*
*         CALLS              GPB
*
*         MACROS             SUBR

CAP       SUBR               ENTRY/EXIT
          STDL   TEMP1
          LDML   0,TEMP1     LOAD BYTE 0,1
          LPN    17B
          SHN    3
          STD    TEMP
          LDML   1,TEMP1     LOAD BYTE 2,3
          SHN    -13
          ADDL   TEMP        ADD THE UPPER BITS
          RJM    GPB         GENERATE EXPECTED PARITY FOR ADDRS BYTE 0
          SHN    3
          STML   ADPB        STORE TO PARITY CELL
          LDML   1,TEMP1     LOAD BYTE 2,3
          SHN    -5
          LPDL   MSK8        MASK FOR ADDRS BYTE 1
          RJM    GPB         GENERATE PARITY ON ADDRESS BYTE
          SHN    2
          RAML   ADPB
          LDML   1,TEMP1     LOAD BYTE 2,3
          LPN    37B         EXTRACT UPPER BITS OF ADDRS BYTE 2
          SHN    3
          STDL   TEMP
          LDML   2,TEMP1     LOAD BYTES 4,5
          STDL   DEX3
          SHN    -16+3       RETAIN LOWER BITS OF ADDRS BYTE 2
          ADDL   TEMP
          RJM    GPB
          SHN    1
          RAML   ADPB
          LDDL   DEX3        RELOAD BYTES 4,5
          SHN    -8
          LPN    37B         RETAIN UPPER BITS OF ADDRS BYTE 3
          RJM    GPB         GENERATE PARITY (LOWER BITS ARE ZERO)
          RAML   ADPB
          LDDL   DEX3        RELOAD BYTES 4,5
          SHN    -4
          LPN    17B         EXTRACT ADDRS PARITY REPORTED.
          LMML   ADPB        COMPARE WITH ADDRS BITS GENERATED
          LJM    CAPX        EXIT
CHW       EJECT
***       CHW                CONVERT HEX WORD TO ASCII
*
*         PURPOSE            CONVERT HEX TO ASCII.
*
*         CALLED             RJM TO CHW
*
*         ENTRY              (A)=VALUE TO CONVERT (EXAMPLE 1234)
*
*         EXIT               VIA CHW ENTRY ADDRESS WITH
*                            (A) = UPPER 2 CHARACTERS (EX 12)
*                            DEX3= LOWER 2 CHARACTERS (EX 34)
*
*         CALLS              CHC
*
*         USES               DEX2, DEX3, TEMP,

CHW       SUBR               ENTRY/EXIT
          STDL   DEX2        SAVE NUMBER TO CONVERT (00)ABCD
          SHN    -12         000A
          RJM    CHC         CONVERT A
          SHN    D.HSL       (XX00)
          STDL   TEMP        SAVE CONVERTED A
          LDDL   DEX2        RELOAD NUMBER (ABCD)
          SHN    D.HSR       (00AB)
          RJM    CHC         CONVERT B
          RADL   TEMP        ADD TO CONVERTED A (AB)
          LDDL   DEX2        RELOAD NUMBER (ABCD)
          SHN    D.QSR       (0ABC)
          RJM    CHC         CONVERT C
          SHN    D.HSL       (XX00)
          STDL   DEX3        SAVE CONVERTED C
          LDDL   DEX2        RELOAD NUMBER (ABCD)
          RJM    CHC         CONVERT D
          RADL   DEX3        ADD TO CONVERTED C (CD)
          LDDL   TEMP        LOAD UPPER TWO CHARS (AB)
          UJN    CHWX        EXIT
CHC      EJECT
***       CHC                CONVERT HEX CHARACTER TO ASCII
*
*         USAGE              CONVERT ONE HEX CHAR TO ASCII
*
*         CALLED             RJM TO CHC FROM CHW
*
*         ENTRY              A=000X (X=NUMBER TO CONVERT)
*
*         EXIT               VIA CHC ENTRY ADDRESS. A=CONVERTED DIGIT
*
*         CALLS              NONE
*
*         USES               TEMP1,
*
CHC       SUBR   *           ENTRY/EXIT
          LPN    D.XF        SAVE ONLY RIGHTMOST DIGIT (000X)
          STDL   TEMP1       SAVE IN DIRECT
          SBN    D.XA        SUBTRACT HEX A
          PJN    CHC10       IF NUMBER IS GREATER THAN HEX A
          LDDL   TEMP1       RELOAD NUMBER
          ADN    D.X30       ADD BIAS -HEX 30 FOR 0-9
          UJN    CHCX        EXIT
CHC10     LDDL   TEMP1       RELOAD NUMBER
          ADN    D.X37       ADD BIAS - HEX 37 FOR A-F
          UJN    CHCX        EXIT

GAI       EJECT
***       GAI                GET ARRAY INDEX
*
*         PURPOSE            TO RETURN THE BITS OF ADDRESS SELECTING
*                            THE CM MODULE. THESE ARE --
*                                  D  - THE ARRAY SIDE
*                                  MS - THE MODULE SELECT
*                                  BK - THE BANK SELECT
*
*         INPUT              (A) - FWA OF THE BUFFER OF INTEREST
*
*         OUTPUT             CODE ADDED TO FSCBFR+1
*
*         USES               TEMP, FSCBFR, ABRT

GAI       SUBR               ENTRY/EXIT
          STDL   TEMP
          LDML   2,TEMP      LOAD RGTR BYTES 4,5
          SHN    -8
          LPN    7B          EXTRACT BANK BITS
          SHN    8
          RAML   FSCBFR+1
          LDML   MODEL,FWAIB LOAD MODEL VALUE
          ADC    -0#34
          NJN    GAI10       IF NOT MODEL 34,
          LDML   1,TEMP      LOAD RGTR BYTE 2,3
          SHN    -15
          SHN    17
          ADIL   TEMP        ADD BYTES 0,1
          SHN    1           BRING DOWN BIT FROM 2**17
GAI05     LPN    3           EXTRACT MS BITS
          SHN    11
          RAML   FSCBFR+1
          UJN    GAIX        EXIT

GAI10     SBN    1           GET MODEL NUMBER
          NJN    GAI20       IF NOT MODEL 35
          LDML   0,TEMP      GET BYTES 0,1
          SHN    -1
          UJN    GAI05       JOIN MAIN TO COMPLETE

GAI20     LDN    5
          STML   ABRT        ELSE, SET ABORT FLAG NONZERO.
          LJM    GAIX
** NEEDS CODE FOR OTHER MODELS..
GPB       EJECT
***       GPB                GENERATE PARITY BITS
*
*         METHOD             COUNT THE BITS PRESENTED IN -A-.  MASK
*                            FOR THE LOWER BIT OF THE COUNT TO GET
*                            THE PROPER BIT FOR EVEN PARITY.
*
*         ENTRY              (A) = THE DATA FOR WHICH THE PARITY BIT IS
*                            TO BE ESTABLISHED.
*
*         EXIT               EXIT WITH DESIRED PARITY IN -A-
*
*         CALLED             CALLED BY RETURN JUMP TO GPB
*
*         USES               TEMP, I
*
*         CALLS              NA
*
*         MACROS             SUBR
*

GPB       SUBR               ENTRY/EXIT
          STDL   TEMP              SAVE THE DATA WORD TO BE EXAMINED
          ZJN    GPB30             IF (A) EQU ZERO, TAKE THE SHORT CUT
          LDN    0                 ELSE, CLEAR THE BIT COUNT
          STDL   I
          LDDL   TEMP              RELOAD THE ENTRY VALUE
GPB10     SHN    17                SHIFT RT END AROUND
          STDL   TEMP              STORE THE RESULTS (RT SHIFTED ONE)
          PJN    GPB20             JUMP IF PREVIOUS LOW BIT IS ZERO
          AODL   I                 ELSE, INCREMENT BIT COUNT
GPB20     LDDL   TEMP              LOAD REMAINING BITS OF WORD
          NJN    GPB10             IF NOT ZERO, REPEAT
          LDDL   I                 ELSE, LOAD BIT COUNT
          LPN    1                 AND MASK FOR LOWER BIT
GPB30     UJN    GPBX              TO GET PROPER PARITY.
GPC       EJECT
***       GPC                GET PORT CODE (FROM NAMED BUFFER)
*
*         PURPOSE            TO GET THE PORT CODE FROM AN ERROR BUFFER
*                            AND TO PLACE IT IN THE RAW FAULT CODE.
*
*         ENTRY              (A) - THE FWA OF THE BUFFER OF INTEREST.
*                            FSCBFR IN AREA OF PORT CODE MUST BE ZERO.
*
*         EXIT               FSCBFR BITS 2**08-10 CONTAIN PORT CODE BIT
*
*         USES               TEMP, FSCBFR,
*
*         MACROS             SUBR

GPC       SUBR               ENTRY/EXIT
          STDL   TEMP        STORE ADDRESS
          LDIL   TEMP        LOAD BYTE 0,1
          SHN    -4
          LPN    7           EXTRACT PORT CODE
          SHN    8
          RAML   FSCBFR+1    ADD TO OUTPUT CODE
          UJN    GPCX

 GSM      SPACE  4,10
**        GSM - GENERATE FAULT SYMPTOM CODE FOR MEMORY.
*
*         CALLS  FMB, WFS.


          ROUTINE  GSM

          LDDL   BC+BCDA     GET ANALYSIS TO LOG
          SHN    -BC.ANP
          SBN    EPEN
          PJP    GSM2        IF ENVIRONMENT WARNING
          LDC    MCEL        CORRECTED ERROR LOG MAINTENANCE REGISTER
          RJM    FMB         FIND MAINTENANCE REGISTER IN SCRATCH BUFFER
          CRML   CDIF,ON
          LDC    MUL1        UNCORRECTED ERROR LOG 1 MAINTENANCE REGISTER
          RJM    FMB         FIND MAINTENANCE REGISTER IN SCRATCH BUFFER
          CRML   CDIF+4,ON
          LDC    MUL2        UNCORRECTED ERROR LOG 2 MAINTENANCE REGISTER
          RJM    FMB         FIND MAINTENANCE REGISTER IN SCRATCH BUFFER
          CRML   CDIF+10B,ON
          LDML   MEMM        MEMORY MODEL NUMBER
          STML   CDIF+14B
          LDC    CDIF        FWA OF INTERFACE BUFFER
          RJM    CMFSC
 GSM1     LDC    2RDM        MEMORY ELEMENT IDENTIFIER
          RJM    WFS         WRITE FAULT SYMPTOM CODE TO SUPPORTIVE STATUS
          LJM    GSMX        RETURN

 GSM2     LDN    3
          STD    T1
 GSM3     LDML   GSMA,T1     GET CANNED ENVIRONMENT FAULT SYMPTOM CODE
          STML   CDIF,T1     STORE IN OUTPUT BUFFER
          SOD    T1
          PJN    GSM3        IF NOT DONE
          UJN    GSM1        LOG THE FAULT CODE

 GSMA     DATA   H*701     *


          BASE   *
*         ENDX   CTP$DFT GENERATE 960 MEMORY FSC.
