*         CTEXT CTP$DFT_READ_EPM_DATA
*
*         THIS DECK GATHERS DATA FROM THE ENVIRONMENT POWER
*         MONITOR ON A 960 CLASS MAINFRAME AND LOGS THE DATA
*         TO THE NON REGISTER STATUS BUFFER.
 RED      SPACE  4,10
**        RED - READ EPM POWER MONITOR DATA.
*
*         USES   CM - CM+3, T1 - T5, W0 - W7.
*
*         CALLS  CLR, CPC, IDA, RFP, SPB, *IPF*, *LOG*.


          ROUTINE RED

          LDM    PKFLG
          ZJP    REDX        IF PACKETS ARE NOT SUPPORTED
          LDN    VER5
          RJM    VCK         CHECK VERSION
          MJP    REDX        IF VERSION DOESNT SUPPORT NRSB

*         IF MIDNIGHT, THEN DO NOT READ EPM DATA.

          LDN    DFCM+7
          RJM    IIB
          CRML   REDD,ON     GET TIME (TOP OF HOUR)
          LDML   REDD+2
          LPC    0#FF00
          ZJP    REDX        IF MIDNIGHT

          LDM    CUOV
          STM    PKTCW1      SAVE CURRENT OVERLAY
          LDC    RED1
          STM    PKTCW2      SAVE RE ENTRY POINT
          LDN    1
          SHN    10B
          LMML   PKTCW
          STML   PKTCW       SET CONTROL WORD TO INDICATE PHASED PROCESSING
          LDN    GETNF
          STM    PKTPH       SET PHASE TO GET NEW FAULTS
          LDN    0
          STM    FALT        INITIALIZE ACCUMULATED EPM FAULTS

 RED1     LDML   PKTCW       SUBSEQUENT ENTRY POINT AFTER INITIAL ENTRY
          LPC    PKWTO       CHECK TIMEOUT FLAG SET
          ZJN    RED4        IF NO TIMEOUT
 RED2     LJM    CPC1        CLEANUP PACKET COMMUNICATION

 RED4     LDM    PES1
          NJN    RED2        IF PACKET ERROR ENCOUNTERED

          LDM    PKTPH
          STD    T1
          SBN    PKTPL
          PJP    RED15       IF BAD PHASE IN PACKET PROCESS
          LDM    REDA,T1
          STD    T1
          LJM    0,T1        JUMP TO PHASE TO PROCESS

*         PHASE  0

 RED6     BSS    0           GET NEW FAULTS
          LDN    EPMRNF
          STM    TOIP        SET EPM TASK IN PACKET
          LDN    GETER
          STM    PKTPH       NEXT PHASE TO PROCESS IS GET EPM REVISION

*         LENGTH IS ONE 8 BIT DATA BYTE ONE 8 BIT SEQUENCE NUMBER

          LDN    2
          STM    RTP2

*         SET CONTROL WORD OFFSET TO ONE, FUNCTION, SEQUENCE IN UPPER BYTE

          LDC    0#B*0#100+PKFET
          STML   RTP1
          CALL   IPF         ISSUE PACKET FUNCTION
          LJM    REDX        RETURN

*         PHASE 1

 RED7     BSS    0           GET EPM REVISION
          LDM    TOIP+ESER
          LPC    0#FF
          STML   FALT        SAVE EPM SYSTEM ERROR FLAG
          LDM    TOIP+EBDE
          LPC    0#FF00
          RAML   FALT        SAVE EPM BOARD ERROR FLAG
          NJP    RED8        IF AN ERROR EXISTS PROCESS
          LJM    CPC1        CLEANUP PACKET COMMUNICATION

 RED8     LPC    0#FF00
          ZJP    RED11       IF ONLY A SYSTEM ERROR EXISTS
          LDN    EPMRD
          STM    TOIP        SET EPM TASK IN PACKET
          LDN    GETEI
          STM    PKTPH       NEXT PHASE TO PROCESS IS GET EXCEPTION INTERRUPT COUNTERS

*         LENGTH IS ONE 8 BIT DATA BYTE ONE 8 BIT SEQUENCE NUMBER

          LDN    2
          STM    RTP2

*         SET CONTROL WORD OFFSET TO ONE, FUNCTION, SEQUENCE IN UPPER BYTE

          LDC    0#B*0#100+PKFET
          STML   RTP1
          CALL   IPF         ISSUE PACKET FUNCTION
          LJM    REDX        RETURN

*         PHASE 2

 RED9     BSS    0           GET EXCEPTION INTERRUPT COUNTERS
          RJM    RFP         REFORMAT PACKET DATA
          LDM    CMIN
          STD    T1
          LDN    DCMP
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   CM
          LRD    CM+1
          LDD    CM
          ADC    RR+CMEPM
          CWML   REDC,T1     WRITE REVISION LEVEL DATA TO CM RESIDENT
          LDN    EPMRIC
          STM    TOIP        SET EPM TASK IN PACKET
          LDN    GETEB
          STM    PKTPH       NEXT PHASE TO PROCESS IS GET BOARD FLAG ERROR BUFFER

*         LENGTH IS ONE 8 BIT DATA BYTE ONE 8 BIT SEQUENCE NUMBER

          LDN    2
          STM    RTP2

*         SET CONTROL WORD OFFSET TO ONE, FUNCTION, SEQUENCE IN UPPER BYTE

          LDC    0#B*0#100+PKFET
          STML   RTP1
          CALL   IPF         ISSUE PACKET FUNCTION
          LJM    REDX        RETURN

*         PHASE 3

 RED10    BSS    0           GET BOARD FLAG ERROR BUFFER
          LDM    CMTL        SIZE OF EXCEPTION INTERRUPT COUNTERS
          STD    T5
          RJM    RFP         REFORMAT PACKET DATA
          LDM    CMIN
          STD    T1
          LDN    DCMP
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   CM
          LRD    CM+1
          LDD    CM
          ADD    T5
          ADC    RR+CMEPM
          CWML   REDC,T1     WRITE EXCEPTION INTERRUPT COUNTERS TO CM RESIDENT
          LDN    EPMBFD
          STM    TOIP        SET EPM TASK IN PACKET
          LDN    LOG407
          STM    PKTPH       NEXT PHASE TO PROCESS IS TO LOG 407 DFT ANALYSIS

*         LENGTH IS ONE 8 BIT DATA BYTE ONE 8 BIT SEQUENCE NUMBER

          LDN    2
          STM    RTP2

*         SET CONTROL WORD OFFSET TO ONE, FUNCTION, SEQUENCE IN UPPER BYTE

          LDC    0#B*0#100+PKFET
          STML   RTP1
          CALL   IPF         ISSUE PACKET FUNCTION
          LJM    REDX        RETURN

*         PHASE 4

 RED11    BSS    0           GET CYCLIC BUFFER 2
          LDN    EPMRRB
          STM    TOIP        SET EPM TASK IN PACKET
          LDN    LOG408
          STM    PKTPH       NEXT PHASE TO PROCESS IS TO LOG 408 DFT ANALYSIS

*         LENGTH IS ONE 8 BIT DATA BYTE ONE 8 BIT SEQUENCE NUMBER

          LDN    2
          STM    RTP2

*         SET CONTROL WORD OFFSET TO ONE, FUNCTION, SEQUENCE IN UPPER BYTE

          LDC    0#B*0#100+PKFET
          STML   RTP1
          CALL   IPF         ISSUE PACKET FUNCTION
          LJM    REDX        RETURN

*         PHASE 5

 RED12    BSS    0           LOG TO NRSB 407
          LDM    CMTL
          STD    T5          SAVE CURRENT CM RESIDENT WORD POSITION
          RJM    RFP         REFORMAT PACKET DATA
          LDM    CMIN
          STD    T1
          LDN    DCMP
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   CM
          LRD    CM+1
          LDD    CM
          ADD    T5
          ADC    RR+CMEPM
          CWML   REDC,T1     WRITE BOARD ERROR BUFFER DATA TO CM RESIDENT
          LDN    BC
          RJM    CLR
          LDN    0
          STD    ET

*         ERROR PRIORITY - CORRECTED.
*         DFT ANALYSIS - EPM REPORTED AN INTERNAL BOARD ERROR.
*         FLAGS - LOGGING

          SETDAN (EPCO,DAEBE) EPM REPORTED INTERNAL BOARD ERROR
          SETFLG (BC.FL)
          LRD    DP+1
          RJM    SPB         SET OS BOUNDS
          LDM    CMTL        SIZE OF REVISION DATA, EXCEPTION INTERRUPT COUNTERS, AND BOARD ERRORS
          STD    T1
          LDN    NRSP        NON REGISTER STATUS BUFFER
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   W0          POINTER TO NRSB
          LDN    DCMP        CENTRAL MEMORY RESIDENT POINTER
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   W4          POINTER TO CM RESIDENT
          LDN    CMEPM
          RADL   W4          POSITION TO PACKET DATA PORTION
 RED13    LRD    W5
          LDDL   W4
          ADD    T1
          ADC    RR
          CRDL   CM          GET DATA IN CM RESIDENT
          LRD    W1
          LDD    W0
          ADD    T1
          ADC    RR+NRSBL+1  BASE SIZE + HEADER WORD
          CWDL   CM          WRITE DATA TO SCRATCH NON REGISTER SUPPORTIVE STATUS
          SOD    T1
          PJN    RED13       IF MORE TO MOVE
          LDM    CMTL
          ADN    NRSBL
          SBN    1
          STM    LLOG        LENGTH TO LOG
          LDN    1
          STML   RTP1
          CALL   LOG         LOG THE ERROR
          LDN    0
          STM    CMTL
          STM    CMIN
          LDML   FALT
          LPC    0#FF        ISOLATE POSSIBLE SYSTEM ERROR
          NJP    RED11       IF SYSTEM ERROR EXISTS
          LJM    CPC         CLEANUP PACKET COMMUNICATION

*         PHASE  6

 RED14    BSS    0           LOG TO NRSB 408
*         RJM    FPD         FILTER PACKET DATA
          RJM    RFP         REFORMAT PACKET DATA
          LDN    BC
          RJM    CLR
          LDN    0
          STD    ET

*         ERROR PRIORITY - CORRECTED.
*         DFT ANALYSIS - EPM REPORTED A SYSTEM ERROR.
*         FLAGS - LOGGING.

          SETDAN (EPCO,DAESE) EPM REPORTED SYSTEM ERROR
          SETFLG (BC.FL)
          LRD    DP+1
          RJM    SPB         SET OS BOUNDS
          LDN    NRSP        NON REGISTER STATUS BUFFER
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   W0          POINTER TO NRSB
          LRD    W1
          LDM    CMTL        SIZE OF CYCLIC BUFFER 2 DATA
          STD    T1
          LDD    W0
          ADC    RR+NRSBL+1  BASE SIZE + HEADER WORD
          CWML   REDC,T1     WRITE BOARD FLAG ERROR DATA TO SCRATCH NRSB
          LDM    CMTL
          ADN    NRSBL
          SBN    1
          STM    LLOG        LENGTH TO LOG
          LDN    1
          STML   RTP1
          CALL   LOG         LOG THE ERROR
          LJM    CPC         CLEANUP PACKET COMMUNICATION

 RED15    BSS    0
          LDD    T1
          STM    REDB+3      SAVE OUT OF PHASE CONDITION
          LDN    BC
          RJM    CLR
          LDN    0
          STD    ET
          SETDAN (EPUN,DABP) BAD PHASE IN PACKET COMMUNICATION
          SETFLG (BC.FL)
          LRD    DP+1
          RJM    SPB         SET OS BOUNDS
          LDN    NRSP        NON REGISTER STATUS BUFFER
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   W0
          LRD    W1
          LDDL   W0
          ADC    RR+NRSBL+1  BASE SIZE + HEADER WORD
          CWML   REDB,ON     WRITE ERROR CODE TO SCRATCH SUPPORTIVE STATUS
          LDN    NRSBL
          STM    LLOG        LENGTH TO LOG
          LDN    1
          STML   RTP1
          CALL   LOG         LOG THE ERROR
          LJM    CPC         CLEANUP PACKET COMMUNICATION

 REDA     BSS    0
          LOC    0
          CON    RED6        PHASE 0 - GET NEW FAULTS
          CON    RED7        PHASE 1 - GET EPM REVISION
          CON    RED9        PHASE 2 - GET EXCEPTION INTERRUPT COUNTERS
          CON    RED10       PHASE 3 - GET EPM BOARD FLAG ERROR BUFFER
          CON    RED11       PHASE 4 - READ CYCLIC BUFFER 2
          CON    RED12       PHASE 5 - LOG TO NRSB 407
          CON    RED14       PHASE 6 - LOG TO NRSB 408
          CON    CPC1        PHASE 7 - RESET EPM TASK
 PKTPL    BSS    0
          LOC    *O

 REDB     BSSZ   4
 REDD     BSS    4           TIME STAMP FROM EICB
 CPC      SPACE  4,10
**        CPC - CLEANUP PACKET COMMUNICATION.
*
*         THIS ROUTINE RESETS ALL CONTROL VARIABLES USED IN
*         OBTAINING EPM DATA.
*

 CPC      LDM    PKTPH
          LMN    CLEPC
          ZJN    CPC1        IF CLEANUP ALREADY TRIED
          LDN    EPMRS
          STM    TOIP
          LDN    CLEPC
          STM    PKTPH
          LDN    2
          STM    RTP2
          LDC    0#B*0#100+PKFET
          STML   RTP1
          CALL   IPF
          LJM    REDX        RETURN

 CPC1     LDN    0
          STM    PKTCW1
          STM    PKTCW2
          STM    FALT
          STM    PKTPH
          STM    PKTCW
          STM    CMTL
          STM    CMIN
          LJM    REDX        RETURN
 IPF      SPACE  4,10
**        IPF - ISSUE PACKET FUNCTION.
*
*         EXIT   TO *CPC*, IF ERROR ON PACKET SEND.
*
*         CALLS  CLR, IDA, *LOG*, *PKT*, SPB.


          ROUTINE IPF

          CALL   PKT         MAKE PACKET REQUEST
          LDC    PKWRP
          RAML   PKTCW       SET RESPONSE PENDING IN CONTROL WORD
          LDM    CALB+1
          ZJP    IPFX        IF NO ERROR RETURN

*         LOG DFT/EPM INTERFACE ERROR.

          STM    IPFA+3      SAVE ERROR CODE
          LDN    BC
          RJM    CLR
          LDN    0
          STD    ET
          SETDAN (EPUN,DAEF) DFT/EPM INTERFACE ERROR
          SETFLG (BC.FL)
          LRD    DP+1
          LDN    NRSP        NON REGISTER STATUS BUFFER
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   W0
          LRD    W1
          RJM    SPB         SET OS BOUNDS
          LDDL   W0
          ADC    RR+NRSBL+1  BASE SIZE + HEADER WORD
          CWML   IPFA,ON     WRITE ERROR CODE TO SCRATCH SUPPORTIVE STATUS
          LDN    NRSBL
          STM    LLOG        LENGTH TO LOG
          LDN    1
          STML   RTP1
          CALL   LOG         LOG THE ERROR
          LJM    CPC         CLEANUP PACKET COMMUNICATION

 IPFA     BSSZ   4           48/0, 16/ERROR CODE
 FPD      SPACE  4,15
**        FPD - FILTER PACKET DATA.
*
*         ENTRY  PACKET DATA IN TOIP.
*
*         EXIT   THIS CODE IS CURRENTLY A STUB.
*                THE EPM DATA IS SCANNED LOOKING FOR A 73(16) ERROR
*                CODE. IF THIS CODE IS FOUND THE REMAINING EPM DATA
*                WILL BE TRUNCATED AS IT IS FELT THAT IT IS SUSPECT.
*
*         USES   T1, T2, T3.


 FPD      SUBR               ENTRY/EXIT
          UJP    FPDX        RETURN




 RFP      SPACE  4,15
**        RFP - REFORMAT PACKET DATA.
*
*         ENTRY  PACKET DATA IN TOIP.
*
*         EXIT   REFORMATTED PACKET IN *REDC*.
*                THIS CONSISTS OF REMOVING THE FIRST BYTE IN THE
*                BUFFER AND STRIPPING OFF THE SEQUENCE NUMBER
*                AND CHECKSUM DATA BYTES.
*                (CMIN) = NUMBER OF CM WORDS IN THIS PACKET.
*                (CMTL) = TOTAL NUMBER OF CM WORDS FROM ALL PACKETS
*                         PROCESSED SO FAR.
*
*         USES   T1, T2, T3, T4


 RFP      SUBR               ENTRY/EXIT
          LDM    TOIP
          LPC    0#FF
          SHN    10
          STDL   T1          SAVE UPPER BYTE OF LENGTH
          LDML   TOIP+1
          SHN    -10
          LMDL   T1
          STDL   T1          SAVE BOTH LOWER AND UPPER BYTES OF LENGTH
          ADN    7
          SHN    -3
          STM    CMIN        SAVE NUMBER OF CM WORDS IN THIS PACKET
          RAML   CMTL        UPDATE RUNNING TOTAL
          LDN    0
          STD    T4
          STD    T2
 RFP1     LDML   TOIP,T2
          LPC    0#FF
          SHN    10
          STDL   T3
          SODL   T1
          MJN    RFPX
          AOD    T2
          LDML   TOIP,T2
          SHN    -10
          LMDL   T3
          STML   REDC,T4
          SODL   T1
          AOD    T4
          UJP    RFP1

 REDC     BSSZ   500

*         END    CTP$DFT_READ_EPM_DATA
