PPR 
          IDENT  PPR,0
          PERIPH J
          BASE   MIXED
          SST    SSCP 
*COMMENT  PPR - PP RESIDENT.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  PPR - PP RESIDENT. 
          SPACE  4,10 
***       PPR - PP RESIDENT.
*         G. R. MANSFIELD.   70/12/12.
*         R. E. TATE.        73/01/05.
*         P. D. HAAS.        75/04/19.
*         W. E. GOEBEL.      78/04/29.
          SPACE  4,10 
***              PPR PROVIDES THE COMMUNICATION LINKS BETWEEN THE 
*         PP S.  IT SERVES AS A PP IDLE PROGRAM, THE LOADER OF PP 
*         PROGRAMS AND ROUTINES, AND A CONVIENT SOURCE OF COMMONLY
*         USED SUBROUTINES FOR OTHER PROGRAMS AND ROUTINES. 
*         PP RESIDENT IS LOADED AT DEAD START TIME BY STL AND IS
*         NEVER CHANGED.
          SPACE  4,20 
***       PPR USES AN OVERLAY MECHANISM FOR PROCESSING THE FOLLOWING
*         MONITOR REQUESTS - AFAM, RTCM, STBM, DTKM, DLKM, AND DFMM.
*         THESE OVERLAYS EXECUTE IN A SAVED AND RESTORED AREA AND ARE 
*         1DD    DUMP DAYFILE 
*         1RU    SHARED RMS DEVICE RESERVE
*         1FA    SHARED RMS FAST ATTACH FILE PROCESSOR
*         THE DAYFILE DUMP AREA OF CMR IS USED AS A BUFFER FOR SAVING 
*         AND RELOADING MEMORY AND DIRECT CELLS.
*         IT IS ORGANIZED AS FOLLOWS
* 
*DDB      *      1DD BOOTSTRAP                   (3 WORDS)
*         *      1DD SAVE BUFFER                 (DFDS WORDS) 
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         NONE. 
          SPACE  4
**        ROUTINES USED.
* 
* 
*         1DD - PROCESS DAYFILE DUMP. 
*         1RU - INDEPENDENT SHARED DEVICE RESERVE PROCESSOR.
*         1FA - INDEPENDENT SHARED DEVICE FAST ATTACH PROCESSOR.
*         7SE - PROCESS SYSTEM DEVICE ERROR.
*         7II - INITIATE CONTROLWARE RELOAD.
*         7KI - EXECUTE LEVEL ONE DIAGNOSTICS.
*         7SI - STATUS PROCESSOR. 
          SPACE  4
*CALL     COMPMAC 
*CALL     COMPIOU 
*CALL     COMSCPS 
*CALL     COMSDFS 
*CALL     COMSIOQ 
*CALL     COMSJCE 
*CALL     COMSLSD 
*CALL     COMSMSC 
          LIST   X
*CALL     COMSMSP 
          LIST   *
*CALL     COMSPIM 
*CALL     COMSSSD 
*CALL     COMSWEI 
*CALL     COMSZOL 
*CALL     COMSMST 
          LIST   X,F
          ORG    0
*CALL     COMPPPR 
          LIST   *
  
          ERRPL  *-PPFW      PRESET CODE FOR NONCURRENT PPS IS TOO LONG 
          TTL    PPR/1LP - LOAD CM RESIDENT *PPR* CODE. 
          TITLE 
          QUAL   1LP
          IDENT  1LP,LPCX 
*COMMENT  PPR - LOAD CM RESIDENT *PPR* CODE.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
*****     1LP - LOAD CM RESIDENT *PPR* CODE.
* 
*         J. M. MAREK.       85/12/10.
          SPACE  4,10 
***       *1LP* IS CALLED BY *STL* TO INITIALIZE THE MS ERROR PROCESSOR 
*         LOAD CODE AND THE PP IDLE LOOP IN CM. 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMSDSL 
 LPC      SPACE  4,10 
**        1LP - MAIN PROGRAM. 
  
  
          ORG    TPBA+5 
 LPC      SUBR               ENTRY/EXIT 
          LDK    MABL        READ HARDWARE OPTIONS
          CRD    CM 
          LDD    CM+1 
          SHN    21-13
          MJN    LPC2        IF NOT *CME* MACHINE 
          AOM    PPIC        SET FL STATUS WORD ADDRESS 
 LPC2     LDK    MSEL        STORE LOAD CODE FOR MS ERROR PROCESSORS
          CWM    PRSA,TR
          ADK    RPLP-MSEL-3 FETCH RPL ADDRESS
          CRD    CM 
          LDM    DLYA 
          STM    PPIB        SET INPUT REGISTER READ DELAY
          LDN    PPIL        SET IDLE LOOP LENGTH 
          STD    CM+3 
          LDD    CM          STORE PP IDLE LOOP CODE
          SHN    14 
          LMD    CM+1 
          SBN    PPIL 
          CWM    PRSB,CM+3
          SBN    PPIL        SET CM ADDRESS 
          STD    CM+2 
          SHN    -14
          LMD    HN          APPEND RPL FLAG
          STD    CM+1 
          LDN    0           CLEAR UNUSED BYTE
          STD    CM 
          LDC    PPIA        SET PP LOAD ADDRESS
          STD    CM+4 
          LDN    PPRL        STORE IDLE LOOP LOAD PARAMETERS
          CWD    CM 
          UJP    LPCX        RETURN 
  
  
*         MASS STORAGE ERROR PROCESSOR LOAD CODE. 
  
 PRSA     BSS    0
          LOC    LMSE 
  
          LDD    OA          WAIT FOR OUTPUT REGISTER CLEAR 
          CRD    CM 
          LDD    CM 
          NJN    LMSE        IF *DRCM* NOT PROCESSED
          LDD    T1          SET PROCESSOR NAME 
          STD    CM+3 
          LDN    1R7
          STD    CM+2 
          MONITOR SPLM       SEARCH PERIPHERAL LIBRARY
          LDD    CM+4        LOAD ADDRESS 
          LJM    PLL4        LOAD ERROR PROCESSOR VIA *PLL* 
          BSS    10000-*     SPARE
          CON    LMSE-1 
          LOC    *O 
  
*         PP IDLE LOOP CODE.
  
 PPIA     EQU    10001-5*PPIL 
 PRSB     BSS    0
          LOC    PPIA 
  
 PPI1     LDC    SBNI+4      DELAY FOR 4X PP
 PPIB     EQU    *O-1 
*         SBN    4           (4X PP)
*         SBN    10          (2X PP)
*         SBN    20          (1X PP)
          NJN    *-1         IF DELAY NOT COMPLETE
  
 PPI      LDD    IA          CHECK INPUT REGISTER 
          CRD    IR 
          LDD    IR 
          ZJN    PPI1        IF NO REQUEST
          LDD    MA 
          CRM    MP,TR
          LDC    PPR1        SET RETURN FROM *PLL*
          STM    PLL
          LDD    IR+1        SET CP NUMBER FOR MOVE CHECK 
          LPN    37 
          STM    FTNG 
          SHN    7           SET CP ADDRESS 
          STD    CP 
          ADC    FLSW        SET FL STATUS WORD ADDRESS 
 PPIC     EQU    *O-1        (FL STATUS WORD ADDRESS) 
*         ADC    FLSW+1      (CME MACHINE)
          STM    FTNC+1 
          LDC    LDCI 
          STM    FTNC 
          LDD    IR+1        FORM PACKAGE NAME
          SCN    77 
          SHN    6
          LMD    IR 
          SHN    6
          LJM    PLL+1       LOAD PROGRAM 
          BSS    10000-*     SPARE SPACE
          CON    PPI-1       TRANSFER ADDRESS - 1 
          LOC    *O 
  
  
          OVERFLOW  LPCX,TPBA+TPLN
 1BP      TTL    PPR/1BP - BOOTSTRAP PROGRAM. 
          TITLE 
          QUAL   1BP
          IDENT  1BP,BSP
*COMMENT  PPR - BOOTSTRAP PROGRAM.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 1BP      SPACE  4,10 
***       1BP - BOOTSTRAP PROGRAM.
* 
*         J. J. EIKUM.
 1BP      SPACE  4,10 
***              *1BP* IS THE BOOTSTRAP PROGRAM USED TO LOAD ROUTINES 
*         THAT OVERLAY AN EXISTING PROGRAM IN THE PP. *CPUMTR* STORES 
*         A COPY OF *1BP* IN THE SAVE AREA AND RETURNS A *BOTM* 
*         FUNCTION IN THE OUTPUT REGISTER. SUBROUTINE FTN IN PPR READS
*         *1BP* INTO THE PP. *1BP* SAVES PP MEMORY AND LOADS THE
*         OVERLAYING ROUTINE. 
 1BP      SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
*         (A) = ADDRESS OF SAVE AREA + 3. 
*         (CM+3) = LENGTH OF FIRST PART OF SAVE AREA. *PPSA1* 
*         (CM+4) = LENGTH OF SECOND PART OF SAVE AREA. *PPSA2*. 
*         (MB) = *SPLM* PARAMETERS. 
 1BP      SPACE  4,10 
***       EXIT CONDITIONS.
* 
*         PP MEMORY SAVED IN SAVE AREA. 
*         (CM+1 - CM+4) = *SPLM* PARAMETERS FOR OVERLAYING ROUTINE. 
*         TO *PLL2*.
 1BP      SPACE  4,10 
***       NOTE - THIS PROGRAM MUST BE CM RESIDENT.
 1BP      SPACE  4,10 
**        1BP - MAIN PROGRAM. 
  
  
 FBB1     EQU    BFMS        FIRST BYTE OF THE FIRST BLOCK SAVED
 FBB2     EQU    MSFW        FIRST BYTE OF THE SECOND BLOCK SAVED 
  
  
          ORG    10001-3*5
 BSP      BSS    0
  
*         SAVE PP MEMORY. 
  
          SBN    3           SET CM ADDRESS OF SAVE AREA
          CWM    FBB1,CM+3   SAVE MS BUFFER, DIRECT CELLS, DRIVER CELLS 
          CWM    FBB2,CM+4   SAVE MS DRIVER AND CURRENT PROGRAM 
  
*         MODIFY THE *PAUSE* IN *PLL* TO DO A *RJM* TO PPFW-1 WHICH 
*         WILL CAUSE EXECUTION OF THE MAIN OVERLAY TO BEGIN AT PPFW.
  
          LDC    PPFW-1 
          STM    PLLD 
  
*         LOAD THE OVERLAYING PROGRAM.
  
          LDD    MA          GET PLL PARAMETERS 
          CRD    CM 
          LJM    PLL2        ENTER PLL TO LOAD PROGRAM
          BSSZ   10000B-*    (SPARE SPACE)
          CON    BSP-1       (T0)+1 BECOMES (P) 
  
*         THE FOLLOWING BYTES ARE PARAMETERS USED BY *CPUMTR*. THEY 
*         ARE NOT READ INTO THE PP. 
  
 .1       SET    10000B+CHRV+1-FBB1+4 
 PPSA1    EQU    .1/5 
 .2       SET    PPSA*5-10B*5-PPSA1*5 
 PPSA2    EQU    .2/5 
  
          CON    2000B       PRESET INDEX + 2000B 
          CON    PPSA1       LENGTH OF FIRST PART OF SAVE AREA
          CON    PPSA2       LENGTH OF SECOND PART OF SAVE AREA 
          CON    FBB1        FWA OF THE FIRST BLOCK WRITTEN 
          CON    FBB2        FWA OF THE SECOND BLOCK WRITTEN
          TTL    PPR/0TD - TERMINATE DAYFILES.
          TITLE 
          QUAL   0TD
          IDENT  0TD,ZTDX 
*COMMENT  PPR - TERMINATE DAYFILES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
*****     0TD - TERMINATE DAYFILES. 
* 
*         P. D. HAAS.        79/07/13.
*         J. A. PETERSON.    79/07/13.
          SPACE  4,10 
***              *0TD* IS CALLED WHEN IT IS NECESSARY TO FLUSH A
*         COMPLETE DAYFILE BUFFER TO DISK.  THIS DIFFERS FROM *1DD* 
*         OPERATION IN THAT THE LATTER WILL DUMP ONLY COMPLETE SECTORS. 
          SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
* 
*         ( (LA)-1 ) = DAYFILE INDEX. 
*                      0 = JOB DAYFILE. 
*                      1 = MASTER DAYFILE.
*                      2 = ACCOUNT DAYFILE. 
*                      3 = ERRLOG DAYFILE.
*                      4 = MAINLOG DAYFILE. 
          SPACE  4,10 
***       EXIT CONDITIONS.
* 
* 
*         DAYFILE BUFFER FLUSHED TO DISK. 
* 
*         DIRECT CELLS 20 - 36 SAVED AND RESTORED.
          SPACE  4,10 
***       NOTES.
* 
* 
*         PP WILL BE HUNG IF MASS STORAGE NOT ASSIGNED. 
* 
*         IT IS THE RESPONSIBILITY OF THE CALLING PROGRAM TO
*         SECURE ANY BUFFER INTERLOCKS THAT MAY BE REQUIRED.
* 
*         IF AN UNRECOVERED WRITE ERROR IS ENCOUNTERED, THE WRITE 
*         IS CONTINUED ON THE NEXT SECTOR.
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPRLM 
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 WC       EQU    16          WORD COUNT 
 NT       EQU    17          NEXT TRACK 
 FT       EQU    20 - 21     FIRST
 BL       EQU    22          BUFFER LENGTH
 OT       EQU    23          OUT
 IN       EQU    24          IN 
 SL       EQU    25          SECTOR LENGTH
 DT       EQU    26          DAYFILE TYPE 
 ER       EQU    27          ERROR STATUS 
 ML       EQU    30 - 34     MAINTENANCE LOG CONTROL WORD 
 MI       EQU    ML+4        MESSAGE INDEX
****
          TITLE  MAIN PROGRAM.
 ZTD      SPACE  4,10 
**        0TD - MAIN PROGRAM. 
  
  
 ZTD      SUBR               ENTRY/EXIT 
          LJM    PRS         PRESET OVERLAY 
  
*         DUMP DAYFILE BUFFER TO DISK.
  
 ZTD1     LDD    WC          SET WORD COUNT REMAINING 
          SBD    T3 
          STD    WC 
          LDD    T3          ADVANCE OUT POINTER
          RAD    OT 
          SBD    BL 
          MJN    ZTD2        IF NO WRAP AROUND
          STD    OT 
 ZTD2     RJM    RDB         READ DAYFILE BUFFER
          LDD    T7          SET SECTOR LINKAGE 
          ADN    1
          STM    BUF
          LMM.   SLM
          NJN    ZTD3        IF NOT END OF TRACK
          LDD    NT          SET NEXT TRACK 
          STM    BUF
          ZJN    ZTD6        IF NO MORE TRACKS AVAILABLE
 ZTD3     LDC.   BUF+WCSF    WRITE DAYFILE SECTOR 
          RJM.   WDS
          PJN    ZTD4        IF NO WRITE ERROR
          SHN    21-11
          MJN    ZTD2        IF REISSUE OF CURRENT SECTOR REQUIRED
          AOD    ER 
 ZTD4     AOD    T7          ADVANCE SECTOR NUMBER
          LMM.   SLM
          NJN    ZTD5        IF NOT CROSSING TRACK BOUNDARY 
          STD    T7 
          LDD    NT          SET NEXT TRACK 
          STD    T6 
 ZTD5     UJN    *+2         DONT ADVANCE MESSAGE LINK
 ZTDA     EQU    ZTD5 
          CON    AML
*         RJM    AML         (MAINTENANCE LOG PROCESSING) 
  
*         CHECK IF MORE DATA LEFT OR IF ZERO-LENGTH EOR SECTOR NEEDED.
  
          LDM    BUF+1
          SHN    -6 
          ZJN    ZTD6        IF END OF DATA 
          LJM    ZTD1        LOOP FOR NEXT BLOCK
  
*         SET BUFFER EMPTY. 
  
 ZTD6     RJM    SPA         READ OUT POINTER WORD
          ADN    1
          CRD    CM 
          LDD    IN          SET OUT = IN 
          STD    CM+4 
          RJM    SPA         STORE OUT POINTER
          ADN    1
          CWD    CM 
  
*         ASSEMBLE EOI SECTOR.
  
 ZTD7     LDD    T6          SET EOI TRACK
          STM    SBUF+ETEI
          LDD    T7          SET EOI SECTOR 
          STM    SBUF+ESEI
          LDN    PDTL        SET DATE AND TIME
          CRM    SBUF+DTEI,TR 
          LDC.   SBUF+WLSF   WRITE EOI SECTOR 
          RJM.   WDS
          PJN    ZTD8        IF NO WRITE ERRORS 
          SHN    21-11
          MJN    ZTD7        IF REISSUE OF CURRENT SECTOR REQUIRED
 ZTD8     ENDMS              RELEASE CHANNEL
  
*         SET EOI IN TRT. 
  
          LDD    T5 
          LMC    4000        ADD CHECKPOINT REQUEST 
          STD    CM+1 
          LDD    T6 
          LPC    3777 
          STD    CM+2 
          LDD    T7 
          STD    CM+3 
          MONITOR  DTKM 
          RJM    SPA         STORE BUFFER STATUS
          ADN    2
          CWM    SBUF+FSEI,ON 
 ZTDB     UJN    ZTD9        RESTORE DIRECT CELLS 
*         PSN                (BML MESSAGE LINK UPDATE REQUIRED) 
          LDN    1           INITIALIZE MESSAGE LINK
          STD    MI 
          LDN    BMLL        STORE MESSAGE LINK 
          CWD    ML 
 ZTD9     LDD    MA          RESTORE DIRECT CELLS 
          CWM    DBUF,TR
          SBN    3
          CRM.   FT,TR
          LJM    ZTDX        RETURN 
          TITLE  SUBROUTINES. 
 AML      SPACE  4,15 
**        AML - ADVANCE MESSAGE LINK. 
* 
*         ENTRY  (ER) = ERROR STATUS. 
*                (MI) = MESSAGE LINK. 
*                (ML - ML+4) = *BMLL* WORD. 
* 
*         EXIT   (MI) ADVANCED TO FIRST MESSAGE IN NEXT SECTOR. 
*                *BMLL* UPDATED IN CM.
* 
*         USES   T1.
* 
*         CALLS  RDB. 
  
  
 AML      SUBR               ENTRY/EXIT 
          LDD    ER 
          ZJN    AML1        IF NO ERRORS 
          RJM    RDB         RE-READ DAYFILE DATA 
 AML1     LDD    MI          SET PP BUFFER INDEX
          SHN    2
          ADD    MI 
          STD    T1 
          LDM    BUF+2,T1    ADVANCE MESSAGE INDEX
          ZJN    AMLX        IF END OF DATA 
          RAD    MI 
          SBD    HN 
          MJN    AML1        IF NOT LAST MESSAGE IN SECTOR
          ADN    1           SET MESSAGE LINK FOR NEXT SECTOR 
          STD    MI 
          LDN    BMLL        STORE MESSAGE LINK 
          CWD    ML 
          UJN    AMLX        RETURN 
 RDB      SPACE  4,10 
**        RDB - READ DAYFILE BUFFER.
* 
*         ENTRY  (WC) = REMAINING WORD COUNT. 
*                (SL) = LENGTH OF SECTOR DATA.
*                (OT) = OUT POINTER.
*                (BL) = BUFFER LENGTH.
* 
*         EXIT   (T3) = NUMBER OF WORDS READ. 
*                (BUF) = DAYFILE DATA.
* 
*         USES   T1 - T2. 
* 
*         CALLS  SBA. 
  
  
 RDB3     AOM    BUF+1       CORRECT SECTOR WORD COUNT
          LDN    BMLL        READ MAINTENANCE LOG CONTROL WORD
          CRM    BUF+2,ON 
  
 RDB      SUBR               ENTRY/EXIT 
          LDD    SL          SET FULL SECTOR
          STD    T3 
          LDD    WC          CHECK WORD COUNT 
          SBD    SL 
          PJN    RDB1        IF FULL SECTOR OF DATA AVAILABLE 
          ADD    SL 
          STD    T3 
 RDB1     LDD    T3          SET SECTOR WORD COUNT
          STM    BUF+1
          ZJN    RDBX        IF EMPTY SECTOR
          STD    T2 
          ADD    OT 
          SBD    BL 
          MJN    RDB2        IF NO WRAP AROUND
          ZJN    RDB2        IF NO WRAP AROUND
          STD    T1          SET WORD COUNT FOR FIRST READ
          LDD    BL          WORD COUNT FROM OUT TO END OF BUFFER 
          SBD    OT 
          STD    T2 
          SHN    2
          ADD    T2 
          ADC.   BUF+2       BUFFER ADDRESS FOR FIRST READ
 RDBA     EQU    *-1
*         ADC.   BUF+7       (MAINTENANCE LOG PROCESSING) 
          STM    RDBB 
          RJM    SBA         READ WRAP AROUND 
          CRM.   *,T1 
 RDBB     EQU    *-1
 RDB2     RJM    SBA         READ SECTOR OF DAYFILE DATA
          ADD    OT 
          CRM    BUF+2,T2 
 RDBC     EQU    *-1
*         CRM    BUF+7,T2    (MAINTENANCE LOG PROCESSING) 
          LJM    RDBX        RETURN 
 RDBD     EQU    *-1
*         LJM    RDB3        (MAINTENANCE LOG PROCESSING) 
 SBA      SPACE  4,10 
**        SBA - SET BUFFER ADDRESS. 
* 
*         ENTRY  (RA) = REFERENCE ADDRESS FOR JOB DAYFILES. 
*                (FT - FT+1) = BUFFER ADDRESS FOR SYSTEM DAYFILES.
* 
*         EXIT   (A) = ABSOLUTE BUFFER ADDRESS. 
* 
*         MACROS NFA. 
  
  
 SBA1     NFA    DAYN        SET BUFFER ADDRESS IN NFL
  
 SBA      SUBR               ENTRY/EXIT 
 SBAA     LDD    FT          SET BUFFER ADDRESS IN CMR
*         UJN    SBA1        (PROCESSING JOB DAYFILE) 
          SHN    14 
          ADD    FT+1 
          UJN    SBAX        RETURN 
 SPA      SPACE  4,10 
**        SPA - SET POINTER ADDRESS.
* 
*         ENTRY  (RA) = REFERENCE ADDRESS FOR JOB DAYFILES. 
* 
*         EXIT   (A) = DAYFILE BUFFER POINTER ADDRESS.
* 
*         MACROS NFA. 
  
  
 SPA1     NFA    DAPN        SET POINTER ADDRESS IN NFL 
  
 SPA      SUBR               ENTRY/EXIT 
 SPAA     LDC    **          (FWA-3 OF DAYFILE POINTERS)
*         UJN    SPA1        (PROCESSING JOB DAYFILE) 
          UJN    SPAX        RETURN 
          SPACE  4,10 
**        BUFFERS.
  
  
 DBUF     BSS    3*5         DIRECT CELL BUFFER 
 SBUF     CON    0,0         EOI SECTOR BUFFER
          BSS    2*5
 BUF      BSS    0           DUMP BUFFER
  
          ERRNG  ZTDL-502-*  OVERLAY OVERFLOWS ASSEMBLY LIMIT 
          TITLE  PRESET.
 PRS      SPACE  4,25 
**        PRS - PRESET OVERLAY. 
* 
*         ENTRY  ( (LA)-1 ) = DAYFILE INDEX.
*                             0 = JOB DAYFILE.
*                             1 = MASTER DAYFILE. 
*                             2 = ACCOUNT DAYFILE.
*                             3 = ERRLOG DAYFILE. 
*                             4 = MAINLOG DAYFILE.
* 
*         EXIT   (T5) = EST ORDINAL.
*                (T6) = CURRENT TRACK.
*                (T7) = CURRENT SECTOR. 
*                (DT) = DAYFILE TYPE (0 = MAINTENANCE LOG). 
*                (WC) = NUMBER OF WORDS IN BUFFER.
*                (SL) = LENGTH OF SECTOR DATA.
*                (NT) = NEXT TRACK IF REQUIRED. 
*                (ER) = 0 IF PROCESSING MAINTENANCE LOG.
*                (IN) = RELATIVE IN POINTER.
*                (OT) = RELATIVE OUT POINTER. 
*                (BL) = BUFFER LENGTH.
*                (FT - FT+1) = DAYFILE BUFFER ADDRESS.
*                (DBUF) = ORIGINAL CONTENTS OF DIRECT CELLS 20 - 36.
* 
*         USES   T3, CM - CM+4. 
* 
*         CALLS  RLI, SPA.
* 
*         MACROS MONITOR, RSTR, SETMS.
  
  
 PRS      RJM    RLI         RELOCATE INSTRUCTIONS
          LDD    MA          SAVE DIRECT CELLS
          CWM.   FT,TR
          SBN    3
          CRM    DBUF,TR
          LDN    DFPP        READ DAYFILE POINTERS
          CRD    CM 
          LDD    CM          SET DAYFILE BUFFER POINTER ADDRESS 
          SHN    14-1 
          ADM    -1 
          SHN    1
          ADD    CM+1 
          ADM    -1 
          SBN    3
          STM    SPAA+1 
          SHN    -14
          RAM    SPAA 
          LDM    -1          CHECK DAYFILE TYPE 
          NJN    PRS1        IF NOT JOB DAYFILE 
          ISTORE SBAA,(UJN SBA1)
          ISTORE SPAA,(UJN SPA1)
 PRS1     RJM    SPA         READ BUFFER POINTERS 
          CRD    FT 
          ADN    1
          CRD    CM 
          ADN    1
          CRD    T5 
          CRM    SBUF+FSEI,ON 
          LDD    CM+2        SET BUFFER LENGTH
          STD    BL 
          ZJN    PRS2        IF ZERO LENGTH BUFFER
          LDD    CM+4        SET OUT
          STD    OT 
          LDD    T5+4        SET DAYFILE TYPE 
          SHN    -6 
          LMN    BMLF 
          STD    DT 
          LDD    T5+2        SET CURRENT TRACK
          STD    T6 
          LDD    T5+3        SET CURRENT SECTOR 
          STD    T7 
          LDD    T5          CHECK DAYFILE EQUIPMENT
          STD    T5 
          NJN    PRS3        IF EQUIPMENT DEFINED 
          MONITOR  HNGM      HANG PP
 PRS2     LJM    ZTD9        RESTORE DIRECT CELLS 
  
 PRS3     SETMS  IO,(NS,SM) 
          LDD    IN          CHECK DATA IN BUFFER 
          SBD    OT 
          NJN    PRS4        IF BUFFER NOT EMPTY
          LJM    ZTD7        WRITE EOI SECTOR 
  
 PRS4     PJN    PRS5        IF IN .GT. OUT 
          ADD    BL 
 PRS5     STD    WC          SET WORD COUNT 
          STD    T3 
          LDD    HN          SET LENGTH OF SECTOR DATA
          STD    SL 
          LDD    DT          CHECK DAYFILE TYPE 
          NJN    PRS6        IF NOT MAINTENANCE LOG 
          STD    ER          CLEAR ERROR STATUS 
          LDD    T3          ADJUST WORD COUNT TO INCLUDE CONTROL WORDS 
          SHN    -6 
          ADN    1
          RAD    T3 
          SOD    SL          SECTOR DATA LENGTH = 77B 
          LDN    5           INITIALIZE FOR MAINTENANCE LOG DUMP
          RAM    RDBA 
          STM    RDBC 
          LDC    RDB3 
          STM    RDBD 
          LDC    RJMI+LA     ENABLE ADVANCE OF MESSAGE LINK 
          STM    ZTDA 
          LDN    BMLL        READ MAINTENANCE LOG CONTROL WORD
          CRD    ML 
          LDN    0           CLEAR DEADSTART FLAG 
          STD    ML 
          STM    ZTDB        SET MESSAGE LINK UPDATE REQUIRED 
 PRS6     LDD    T3          CHECK SPACE ON CURRENT TRACK 
          LPN    77 
          NJN    PRS7        IF NOT ON 100 WORD BOUNDARY
          AOD    T3          ALLOW FOR ZERO-LENGTH EOR SECTOR 
 PRS7     LDD    T3 
          ADN    77 
          SHN    -6 
          ADD    T7 
          SBM.   SLM
          MJN    PRS8        IF SPACE ON CURRENT TRACK
          LDN    ZERL 
          CRD    CM 
          LDD    T6          REQUEST NEXT DAYFILE TRACK 
          STD    CM+2 
          LDD    T5 
          STD    CM+1 
          MONITOR  RTCM 
          LDD    CM+4        SET NEXT TRACK 
          STD    NT 
 PRS8     LJM    ZTD2        ENTER MAIN LOOP
  
  
          HERE               DUMP REMOTE TABLES 
          RSTR               RESTORE INSTRUCTIONS 
  
          ERRNG  ZTDL-*      OVERLAY OVERFLOWS ASSEMBLY LIMIT 
          TTL    PPR/1DD - DUMP DAYFILE BUFFERS.
          TITLE 
          QUAL   1DD
          IDENT  1DD,DDB
*COMMENT  PPR - DUMP DAYFILE BUFFER.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
*****     1DD - DUMP DAYFILE BUFFER.
* 
*         G. R. MANSFIELD.   70/07/17.
*         R. E. TATE.        73/01/05.
          SPACE  4
***              *1DD* IS CALLED BY PP RESIDENT OR DIRECTLY BY
*         *CPUMTR* WHEN A DAYFILE BUFFER HAS BEEN FILLED TO THE 
*         THRESHOLD LIMIT.  THIS LIMIT IS DEFINED AS THE LARGEST
*         NUMBER OF COMPLETE SECTORS THAT FIT IN THE BUFFER.
*         THUS FOR A BUFFER 414 WORDS LONG, A DUMP WILL BE INITIATED
*         WHEN THE BUFFER CONTAINS AT LEAST 400 WORDS.  IN THIS 
*         INSTANCE, 4 SECTORS WILL BE WRITTEN SINCE *1DD* DUMPS 
*         ONLY COMPLETE SECTORS.
          SPACE  4,10 
***       INDIRECT CALL (FROM PP RESIDENT). 
* 
* 
*         (CM+4) = DAYFILE INDEX. 
*                  0 = JOB DAYFILE. 
*                  1 = MASTER DAYFILE.
*                  2 = ACCOUNT DAYFILE. 
*                  3 = ERRLOG DAYFILE.
*                  4 = MAINLOG DAYFILE. 
          SPACE  4,10 
***       DIRECT CALL (FROM *CPUMTR*).
* 
* 
*         (IR - IR+1) = *1DD*.
*         (IR+4) = DAYFILE INDEX. 
*                  0 = JOB DAYFILE. 
*                  1 = MASTER DAYFILE.
*                  2 = ACCOUNT DAYFILE. 
*                  3 = ERRLOG DAYFILE.
*                  4 = MAINLOG DAYFILE. 
* 
*         PP DUMP BUFFER NOT USED.
          SPACE  4
***       OPERATOR MESSAGES.
* 
* 
*         *1DD ABT.* WILL BE DISPLAYED AT THE SYSTEM CP ON ANY OF THE 
*         FOLLOWING CONDTIONS-
* 
*         1)     UNRECOVERED WRITE ERROR ON A DAYFILE DUMP. 
*         2)     NO TRACK AVAILABLE TO WRITE ON.
          SPACE  4
***       ENTRY CONDITIONS. 
* 
* 
*         LOCATIONS *EPFW* THROUGH *MSD* ARE SAVED IN THE DUMP BUFFER.
*         LOCATIONS *MSFW* THROUGH THE END OF *1DD* ARE SAVED.
          SPACE  4
***       EXIT CONDITIONS.
* 
* 
*         ALL LOCATIONS FROM THE DUMP BUFFER ARE RESTORED.
          SPACE  4
***       NOTES.
* 
* 
*         THIS PACKAGE MUST RESIDE IN RPL.
          SPACE  4
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 ER       EQU    15          ERROR STATUS 
 T8       EQU    16          TEMPORARY
 SL       EQU    17          SECTOR LENGTH
 DP       EQU    20 - 24     DAYFILE BUFFER POINTER WORD
 SX       EQU    25          CONSTANT 6 
 B1       EQU    26 - 32     WORD 1 OF DAYFILE BUFFER POINTERS
 FT       EQU    B1          FIRST
 IN       EQU    B1+4        IN 
 B2       EQU    33 - 37     WORD 2 OF DAYFILE BUFFER POINTERS
 BL       EQU    B2+2        BUFFER LENGTH
 OT       EQU    B2+4        OUT
 FS       EQU    40 - 44     DAYFILE BUFFER FST 
 SC       EQU    45          SECTOR COUNT 
 NT       EQU    46          NEXT TRACK 
 TC       EQU    47          TYPE OF CALL (DIRECT/INDIRECT) 
 DI       EQU    IR+4        DAYFILE INDEX
 ML       EQU    60 - 64     MAINTENANCE LOG CONTROL WORD 
 MI       EQU    ML+4        MESSAGE INDEX
 DR       EQU    65          *DFM* RETURN ADDRESS 
****
          SPACE  4,10 
***       BUFFER LOCATIONS. 
  
  
 MBUF     EQU    PPFW-5      MESSAGE BUFFER SAVE AREA 
 BUF      EQU    MBUF+6*5    WRITE BUFFER ADDRESS 
 DDB      TITLE  MAIN PROGRAM.
**        DDB - MAIN PROGRAM. 
  
  
          ORG    DDFW 
  
*         INITIALIZE CENTRAL ADDRESSES. 
  
 DDB      LDD    IA          CHECK IF DIRECT CALL 
          CRD    T1 
          LDD    T1 
          LMC    2R1D 
          STD    TC 
          UJN    DDB1        READ DAYFILE POINTER WORD
  
          ERRNG  DDBA-DDB-5  BUFFER OVERFLOW
  
 DDBA     BSS    0
          LOC    10003-2*5
 DDBB     CRM    MSFW,T2     RESTORE DRIVER AND CALLING PROGRAM 
          LDN    DFPP        CLEAR DUMP BUFFER INTERLOCK
          CWM    DDBB-5,ON
          LJM    DFM3        RETURN TO PPR
          CON    DDBB-1      EXECUTION ADDRESS - 1
          CON    0           (T1) 
          CON    DFDS-65     (T2) 
          LOC    *O 
  
 DDB1     LDN    DFPP        READ DAYFILE POINTER WORD
          CRD    DP 
          CRM    DDBA-5,ON
          LDD    T1+1 
          SHN    -6 
          LMN    1RD
          RAD    TC 
          ZJN    DDB1.1      IF DIRECT CALL 
          LDD    CM+4        SET DAYFILE INDEX
          STD    IR+4 
          AOM    DDBA-5+4    CLEAR DUMP BUFFER INTERLOCK
          LDD    DP+2        WRITE BOOT STRAP INTO DUMP BUFFER
          SHN    14 
          ADD    DP+3 
          ADN    44+3 
          CWM    DDBA-5,TR
          LDM    DFM         PRESERVE *DFM* RETURN ADDRESS
          STD    DR 
          UJN    DDB2        CHECK REQUEST
  
 DDB1.1   LDN    0           INTERLOCK BUFFER 
          STD    CM+1 
          MONITOR  DFMM      INTERLOCK REQUEST
          LDD    CM+4 
          ZJN    DDB2        IF INTERLOCKED 
          LJM    DDB21       DROP PP
  
 DDB2     LDD    DI          CHECK REQUEST
          NJN    DDB3        IF NOT JOB DAYFILE 
          LDC    SBA1+77-SBAA+UJNI  MODIFY INSTRUCTIONS 
          STM    SBAA 
          LDC    SPA1+77-SPAA+UJNI
          STM    SPAA 
 DDB3     RJM    SPA         READ BUFFER POINTERS 
          CRD    B1 
          ADN    1
          CRD    B2 
          ADN    1           READ DAYFILE FST 
          CRD    FS 
          LDD    BL          SET POINTER ADVANCE FOR ERROR EXIT 
          SCN    77 
          STD    SL 
          SHN    -6          SET SECTOR COUNT 
          STD    SC 
  
*         INITIALIZE FOR DAYFILE FST. 
  
          LDN    ZERL        CLEAR ERROR STATUS 
          CRD    CM+1 
          LDN    6           DEFINE CONSTANT 6
          STD    SX 
          LDD    MA          SAVE MESSAGE BUFFER
          CRM    MBUF,SX
          LDD    FS          SET EST ORDINAL
          STD    T8 
          STD    T5 
          NJN    DDB5        IF FILE USED 
  
*         PREPARE NEW FST.
  
          LDN    DAYS        SELECT DAYFILE EQUIPMENT 
          STD    CM+2 
          AOD    SC          INCLUDE SYSTEM SECTOR IN SECTOR COUNT
          MONITOR RTCM       ASSIGN MASS STORAGE SPACE
          LDD    CM+4        SET FIRST TRACK
          NJN    DDB4        IF TRACK ASSIGNED
          RJM    AOP         ADVANCE OUT POINTER
          LJM    DDB18       ABORT DUMP 
  
*         CREATE SYSTEM SECTOR. 
  
 DDB4     STD    FS+1 
          STD    FS+2 
          STD    T6 
          LDD    CM+1        SET EQUIPMENT
          STD    T5 
          STD    FS 
          LDN    ZERL        CLEAR FILE NAME IN SYSTEM SECTOR 
          CRM    FNSS-BFMS+BUF,ON 
          LDN    PDTL        SET DATE AND TIME
          CRM    DTSS-BFMS+BUF,ON 
          LDC    LOFT*100    SET FILE TYPE
          STM    FNSS+4-BFMS+BUF
 DDB5     SETMS  IO,(ND,NS,SM)
          LDD    HN          SET SECTOR LENGTH
          STD    SL 
          LDD    FS+4        CHECK DAYFILE
          SHN    -6 
          LMN    BMLF 
          NJN    DDB6        IF NOT MAINTENANCE LOG 
          LDC    LDDI+ER     INITIALIZE FOR MAINTENANCE LOG DUMP
          STM    AOPA 
          LDN    5
          RAM    RDDA 
          STM    RDDC 
          LDC    RDD2 
          STM    RDDD 
          SOD    SL          SECTOR DATA LENGTH = 77B 
          LDN    BMLL        READ SECTOR CONTROL WORD 
          CRD    ML 
          LDN    0           CLEAR DEADSTART FLAG 
          STD    ML 
 DDB6     LDD    T8 
          NJN    DDB7        IF FILE WRITTEN
          STD    T7 
          LDD    MA          MOVE FST TO SYSTEM SECTOR
          CWD    FS 
          CRM    EQSS-BFMS+BUF,ON 
          LDN    77          SET SYSTEM SECTOR LINKAGE BYTES
          STM    BUF+1
          LDC    3777 
          LJM    DDB10       WRITE SYSTEM SECTOR
  
*         REQUEST ADDITIONAL TRACK IF NEEDED. 
  
 DDB7     LDN    ZERL 
          CRD    CM 
          LDD    FS+2        SET CURRENT TRACK
          STD    CM+2 
          STD    T6 
          LDD    FS+3        SET CURRENT SECTOR 
          STD    T7 
          ADD    SC 
          SBM    SLM
          MJN    DDB8        IF SECTOR LIMIT NOT REACHED
          LDD    FS          SET EQUIPMENT
          STD    CM+1 
          MONITOR RTCM       REQUEST TRACK
          AOM    DDBD        SET CHECKPOINT REQUEST 
          LDD    CM+4        SAVE NEXT TRACK
          STD    NT 
          NJN    DDB8        IF TRACK ASSIGNED
          AOD    ER          SET ERROR INDICATOR
          UJN    DDB8        CONTINUE 
  
*         END OF CODE OVERLAYED BY BUFFER.
  
 .A       EQU    BUF+502-*
          IFPL   .A,2        PAD WITH HANG INSTRUCTIONS IF NECESSARY
          DUP    .A,1 
          UJN    *           HANG-S 
  
 DDB8     RJM    RDD         READ DAYFILE DATA
  
*         ADVANCE OUT POINTER ASAP TO FREE UP BUFFER SPACE. 
  
          RJM    AOP         ADVANCE OUT POINTER
  
*         DUMP BUFFER.
  
 DDB9     LDD    HN 
          STM    BUF+1
          LDD    T7          SET NEXT SECTOR
          ADN    1
          STM    BUF
          LMM    SLM
          NJN    DDB11       IF NOT SECTOR LIMIT
          LDD    NT          SET NEXT TRACK IN LINKAGE
 DDB10    STM    BUF
          ZJN    DDB14       IF TRACK NOT AVAILABLE 
 DDB11    LDC    BUF+WCSF    WRITE SECTOR 
          RJM    WDS
          PJN    DDB12       IF NO WRITE ERRORS 
          SHN    21-11
          MJN    DDB15       IF REISSUE OF CURRENT SECTOR REQUIRED
          AOD    ER          SET ERROR INDICATOR
 DDB12    UJN    *+2         DONT ADVANCE OUT POINTER 
 DDBC     EQU    DDB12
          CON    AOP
*         RJM    AOP         (AFTER 1ST SECTOR OF DAYFILE PROCESSED)
          AOD    T7 
          STD    FS+3 
          LMM    SLM
          NJN    DDB13       IF NOT SECTOR LIMIT
          STD    T7          RESET TRACK AND SECTOR 
          STD    FS+3 
          LDD    NT          SET TRACK
          STD    T6 
          STD    FS+2 
 DDB13    SOD    SC          DECREMENT SECTOR COUNT 
 DDB14    ZJN    DDB16       IF DUMP COMPLETE 
 DDB15    LDC    RJMI        ENABLE OUT POINTER UPDATE
          STM    DDBC 
          RJM    RDD         READ NEXT SECTOR OF DAYFILE DATA 
          LJM    DDB9        PROCESS NEXT SECTOR
  
*         ASSEMBLE EOI SECTOR.
  
 DDB16    LDN    0
          STM    BUF
          STM    BUF+1
          RJM    SPA         READ FILE STATUS WORD
          ADN    2
          CWD    FS 
          CRM    BUF+FSEI,ON
          LDN    PDTL        READ DATE AND TIME 
          CRM    BUF+DTEI,TR
          LDC    BUF+WLSF    WRITE EOI SECTOR 
          RJM    WDS
          PJN    DDB17       IF NO WRITE ERRORS 
          SHN    21-11
          MJN    DDB16       IF REISSUE OF CURRENT SECTOR REQUIRED
          AOD    ER          SET ERROR INDICATOR
 DDB17    ENDMS              END MASS STORAGE OPERATION 
          LDD    MA          RESTORE DIRECT CELLS 
          CWM    MBUF,SX
 DDBD     LDN    0           LOAD CHECKPOINT REQUEST
*         LDN    1           (CHECKPOINT REQUESTED) 
          SHN    13 
          LMD    T5          MERGE WITH EQUIPMENT 
          STD    CM+1 
          LDD    T6          SET LAST SECTOR WRITTEN REQUEST
          LPC    3777 
          STD    CM+2 
          LDD    T7 
          STD    CM+3 
          MONITOR DTKM
          LDD    ER 
          ZJN    DDB20       IF NO ERRORS 
 DDB18    LDN    NCPL        DISPLAY MESSAGE AT SYSTEM CP 
          CRD    CM 
          AOD    CM+1 
          SHN    7
          ADN    MS2W 
          CWM    =C*1DD ABT.*,ON
 DDB20    LDD    FS+4        SET BUFFER NOT BUSY / CLEAR *1DD* FLAG 
          SCN    4           CLEAR *1DD* CALLED FLAG
          ADN    1           SET NOT BUSY 
          STD    FS+4 
          RJM    SPA
          ADN    2
          CWD    FS 
          LDD    TC 
          NJN    DDB22       IF DIRECT CALL 
 DDB21    MONITOR  DPPM      DROP PPU 
          LJM    PPR         EXIT TO PP RESIDENT
  
 DDB22    LDN    65          RESTORE PP 
          STD    CM 
          LDD    DR          RESET *DFM* RETURN 
          STM    DFM
          LDD    DP+2        LOAD ADDRESS OF DUMP BUFFER
          SHN    14 
          ADD    DP+3 
          ADN    3
          CRM    EPFW,CM
*         CRM    MSFW,T2     RESTORE DRIVER AND CALLING PROGRAM 
*         LDN    DFPP        CLEAR DUMP BUFFER INTERLOCK
*         CWM    DDBB-5,ON
*         LJM    DFM3        RETURN TO PPR
          TITLE  SUBROUTINES. 
 AOP      SPACE  4,20 
**        AOP - ADVANCE OUT POINTER.
* 
*         ENTRY  (SL) = LENGTH OF SECTOR DATA.
*                (OT) = OUT POINTER.
*                (BL) = BUFFER LENGTH.
*                (ER) = ERROR STATUS. 
*                (MI) = MAINTENANCE LOG MESSAGE LINK. 
*                (ML - ML+4) = *BMLL* WORD. 
*                (B2 - B2+4) = OUT POINTER WORD.
* 
*         EXIT   (OT) ADVANCED IN PP AND CM.
*                (MI) ADVANCED TO FIRST MESSAGE IN NEXT SECTOR. 
* 
*         USES   T1.
* 
*         CALLS  RDD, SPA.
* 
*         MACROS MONITOR. 
  
  
 AOP3     LDD    SL          ADVANCE OUT POINTER BY SECTOR LENGTH 
          RAD    OT 
          SBD    BL 
          MJN    AOP4        IF NO WRAP AROUND
          STD    OT 
 AOP4     RJM    SPA         STORE OUT POINTER
          ADN    1
          CWD    B2 
  
 AOP      SUBR               ENTRY/EXIT 
 AOPA     UJN    AOP3        ADVANCE OUT POINTER
*         LDD    ER          (MAINTENANCE LOG PROCESSING) 
          ZJN    AOP1        IF NO ERRORS 
          RJM    RDD         RE-READ DAYFILE DATA 
 AOP1     LDD    MI          SET PP BUFFER INDEX
          SHN    2
          ADD    MI 
          STD    T1 
          LDM    BUF+2,T1    ADVANCE MESSAGE INDEX
          ZJN    AOP2        IF BAD MESSAGE LENGTH
          RAD    MI 
          SBD    HN 
          MJN    AOP1        IF NOT LAST MESSAGE IN SECTOR
          ADN    1           SET MESSAGE LINK FOR NEXT SECTOR 
          STD    MI 
          SHN    -6 
          NJN    AOP2        IF BAD MESSAGE LINK
          LDN    BMLL        STORE MESSAGE LINK 
          CWD    ML 
          UJP    AOP3        ADVANCE OUT POINTER
  
 AOP2     MONITOR  HNGM 
          UJN    AOP2        HANG PP SOLID
 RDD      SPACE  4,10 
**        RDD - READ DAYFILE DATA.
* 
*         ENTRY  (OT) = OUT POINTER.
*                (BL) = BUFFER LENGTH.
*                (SL) = LENGTH OF SECTOR DATA.
* 
*         EXIT   (BUF) = SECTOR OF DAYFILE DATA.
* 
*         USES   T0 - T2. 
* 
*         CALLS  SBA. 
  
  
 RDD2     LDN    BMLL        READ MAINTENANCE LOG CONTROL WORD
          CRM    BUF+2,ON 
  
 RDD      SUBR               ENTRY/EXIT 
          LDD    SL          SET NUMBER OF WORDS TO READ
          STD    T2 
          ADD    OT 
          SBD    BL 
          MJN    RDD1        IF NO WRAP AROUND
          ZJN    RDD1        IF NO WRAP AROUND
          STD    T1 
          LDD    BL          WORD COUNT FROM OUT TO END OF BUFFER 
          SBD    OT 
          STD    T2 
          SHN    2
          ADD    T2 
          ADC    BUF+2       BUFFER ADDRESS FOR FIRST READ
 RDDA     EQU    *-1
*         ADC    BUF+7       (MAINTENANCE LOG PROCESSING) 
          STM    RDDB 
          RJM    SBA         READ WRAP AROUND 
          CRM    **,T1
 RDDB     EQU    *-1
 RDD1     RJM    SBA         READ SECTOR OF DAYFILE DATA
          ADD    OT 
          CRM    BUF+2,T2 
 RDDC     EQU    *-1
*         CRM    BUF+7,T2    (MAINTENANCE LOG PROCESSING) 
          LJM    RDDX        RETURN 
 RDDD     EQU    *-1
*         LJM    RDD2        (MAINTENANCE LOG PROCESSING) 
 SBA      SPACE  4,10 
**        SBA - SET BUFFER ADDRESS. 
* 
*         ENTRY  (RA) = REFERENCE ADDRESS FOR JOB DAYFILES. 
*                (FT - FT+1) = BUFFER ADDRESS FOR SYSTEM DAYFILES.
* 
*         EXIT   (A) = ABSOLUTE BUFFER ADDRESS. 
* 
*         MACROS NFA. 
  
  
 SBA1     NFA    DAYN        SET BUFFER ADDRESS IN NFL
  
 SBA      SUBR               ENTRY/EXIT 
 SBAA     LDD    FT          SET BUFFER ADDRESS IN CMR
*         UJN    SBA1        (PROCESSING JOB DAYFILE) 
          SHN    14 
          ADD    FT+1 
          UJN    SBAX        RETURN 
  
          ERRPL  SBAA-SBA1-40  JUMP OUT OF RANGE
 SPA      SPACE  4,10 
**        SPA - SET POINTER ADDRESS.
* 
*         ENTRY  (RA) = REFERENCE ADDRESS FOR JOB DAYFILES. 
*                (DP - DP+1) = FWA DAYFILE POINTERS.
* 
*         EXIT   (A) = DAYFILE BUFFER POINTER ADDRESS.
* 
*         MACROS NFA. 
  
  
 SPA1     NFA    DAPN        SET POINTER ADDRESS IN NFL 
  
 SPA      SUBR               ENTRY/EXIT 
 SPAA     LDD    DP          SET DAYFILE POINTER ADDRESS
*         UJN    SPA1        (PROCESSING JOB DAYFILE) 
          SHN    14-1 
          ADD    DI 
          SHN    1
          ADD    DP+1 
          ADD    DI 
          SBN    3
          UJN    SPAX        RETURN 
  
          ERRPL  SPAA-SPA1-40  JUMP OUT OF RANGE
  
*         IF THIS TEST FAILS, INCREASE *DDLW* IN COMSMSC.  *1MB*
*         INSURES THAT NO 16-BIT INSTRUCTIONS ARE WITHIN THE AREA 
*         SAVED AND RESTORED BY *1DD*.
  
          ERRNG  DDLW-* 
          SPACE  4
          USE    BUFFER 
  
 A        EQU    MSFW+DFDS*5-65*5-DDFW  BYTES SAVED FROM START OF *1DD* 
          ERRNG  A/5*5+DDFW-*  *1DD* OVERFLOWS DUMP BUFFER
 1RU      TTL    PPR/1RU - ISHARED UNIT RESERVE PROCESSOR.
          EJECT 
          QUAL   1RU
          IDENT  1RU,PPFW 
*COMMENT  PPR - ISHARED UNIT RESERVE PROCESSOR. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       1RU - ISHARED UNIT RESERVE PROCESSOR. 
*         G. A. SCHUMACHER.  79/08/03.
*         J. J. EIKUM.       81/05/18.
*         J. J. EIKUM.       86/10/31.
          SPACE  4,10 
***              *1RU* IS CALLED WHEN A MONITOR FUNCTION THAT REQUIRES
*         ACCESS TO TABLES ON AN INDEPENDENT SHARED DEVICE IS ISSUED. 
* 
*                *1RU* IS CALLED INTO A PP (STAND-ALONE MODE) IF ONE
*         IS AVAILABLE. IF THERE ARE NO FREE PPS, PART OF THE PP THAT 
*         ISSUED THE FUNCTION IS SAVED IN A CENTRAL MEMORY SAVE AREA
*         AND *1RU* IS LOADED INTO THAT PP (OVERLAYING MODE). 
* 
*                *1RU* IS NORMALLY EXECUTED AS A MAIN OVERLAY, BUT IT 
*         IS CALLED VIA AN *EXECUTE* MACRO DURING SOME PHASES OF ERROR
*         PROCESSING.  *1MV* CALLS IT VIA *EXECUTE* WHEN ATTEMPTING TO
*         REPAIR THE LABEL BY REWRITING IT FROM CENTRAL MEMORY.  *3RU*
*         CALLS *1RU* VIA *EXECUTE* WHEN RETRYING A REQUEST AFTER 
*         ERROR PROCESSING. 
* 
*         *1RU* PERFORMS THE FOLLOWING ACTIONS- 
*         1. USING THE MASS STORAGE DRIVER, SET THE CONTROLLER AND
*            UNIT RESERVES IN THE HARDWARE. 
*         2. READ THE MST AND TRT FROM THE LABEL TRACK TO CM. 
*         3. REWRITE THE LABEL SECTOR WITH THE SOFTWARE RESERVE SET IN
*            WORD *SDGL*. 
*         4. IF OVERLAYING MODE, ISSUE THE ORIGINAL FUNCTION. 
*         5. WAIT FOR ALL FUNCTIONS TO BE PROCESSED.
*         6. WRITE THE TRT, MRT, SECOND COPY OF THE MST, TRT, AND MRT.
*         7. WRITE THE LABEL SECTOR WITH THE SOFTWARE RESERVE CLEAR.
*         8. RELEASE THE HARDWARE RESERVES. 
*         9. IF OVERLAYING MODE, RESTORE PP MEMORY. 
*            IF STAND-ALONE MODE, DROP THE PP.
          EJECT 
***       ENTRY CONDITIONS. 
* 
* 
*         FOR STAND-ALONE MODE- 
* 
*         (IR+4) = EST ORDINAL. 
* 
*         FOR OVERLAYING MODE-
* 
*         (MB+1, BYTES 1 - 2) = SAVE AREA ADDRESS.
*         (SAVE AREA WORD 1) = ORIGINAL OUTPUT REGISTER.
*         (SAVE AREA WORDS 2 - 7) = ORIGINAL MESSAGE BUFFER.
*         PP MEMORY SAVED IN THE SAVE AREA. 
* 
*         FOR *EXECUTE* MODE- 
* 
*         (EA) = *FTN* EXIT ADDRESS, IF *3RU* RETRY CALL. 
*         (IR+2) = EST ORDINAL, IF *1MV* REPAIR CALL. 
*         (IR+3) = FUNCTION CODE. 
*                  0, IF *1MV* REPAIR CALL. 
*                  1, IF *3RU* RETRY CALL.
*         (SA - SA+1) = PP SAVE AREA ADDRESS, IF *3RU* RETRY CALL.
*                       0, IF STANDALONE (OTHER STANDALONE ENTRY
*                          CONDITIONS ARE ALSO ASSUMED. 
*                       OTHERWISE, OVERLAYING ENTRY CONDTIONS ARE 
*                          ASSUMED. 
          SPACE  4,10 
***       EXIT CONDITIONS.
* 
* 
*         FOR OVERLAYING MODE-
*         PP MEMORY IS RESTORED FROM THE PP SAVE AREA.
*         MESSAGE BUFFER IS UPDATED TO INFORMATION RETURNED 
*         BY CPUMTR WHEN THE FUNCTION WAS PROCESSED.
          SPACE  4,10 
***       NOTE - THIS OVERLAY MUST RESIDE IN *RPL*. 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMSMMF 
*CALL     COMSLSD 
 MACROS   SPACE  4,10 
**        MACROS. 
 ERROR    SPACE  4,10 
**        ERROR - ERROR IN R/W OF SHARED DISK TABLES. 
* 
* 
*         ERROR  E
*         E=     ERROR NUMBER.
* 
*         CALLS  ERR. 
  
  
          PURGMAC  ERROR
  
 ERROR    MACRO  E
          MACREF ERROR
          LDN    E
          LJM    ERR         PROCESS ERROR
 ERROR    ENDM
 OVERLAY  SPACE  4,10 
**        OVERLAY - GENERATE OVERLAY CONSTANTS. 
* 
*         OVERLAY (TEXT),LOAD 
* 
*         ENTRY  *TEXT* = TEXT FOR SUBTITLE.
*                *LOAD* = ORIGIN ADDRESS. 
  
          PURGMAC OVERLAY 
  
 OVERLAY  MACRO  TEXT,LOAD
          LOCAL  OVL
          NOREF  .N 
          MACREF OVERLAY
 .N       SET    .N+1 
 .M       MICRO  .N,1, UVWXYZ 
 .O       MICRO  1,3 "OVLB"".M" 
          TTL    PPR/".O" - ISHARED UNIT RESERVE PROCESSOR. 
          IDENT  ".O",OVL    TEXT 
          TITLE  TEXT 
*COMMENT  PPR - TEXT
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          ORG    LOAD 
 OVL      BSS    0
          ENDM
  
  
 .N       SET    0
 OVLB     MICRO  1,, 3R      BASE OVERLAY NAME
 DIRECT   SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
 BEGIN    BSSN   16 
 T8       BSSN   1           TEMPORARY
 T9       BSSN   1           TEMPORARY
 CN       BSSN   5           CM WORD BUFFER 
 CO       BSSN   1           CURRENT OFFSET INTO TRT/MRT IN CM
 DL       BSSN   1           DIT LENGTH 
 DO       BSSN   1           OFFSET TO DIT FROM START OF TRT
 TA       BSSN   2           TRT ADDRESS IN CENTRAL MEMORY
 TL       BSSN   1           TRT LENGTH 
 ID       BSSN   1           MACHINE ID 
 MI       BSSN   1           MACHINE INDEX FOR DEVICE 
 SX       BSSN   1           CONSTANT 6 
 DT       BSSN   1           DEVICE TYPE FROM EST 
 MS       BSSN   1           MST ADDRESS
 SA       BSSN   2           PP SAVE AREA ADDRESS 
 OR       BSSN   5           OUTPUT REGISTER IMAGE BUFFER 
 RI       BSSN   1           CALLER-S RETURN-ON-INACESSIBLE DEVICE FLAG 
          ERRNG  IR-*        DIRECT CELLS OVERFLOW INTO *IR*
          BSSN   7           RESERVED FOR *PPR* 
 EA       BSSN   1           EXIT ADDRESS 
 TM       BSSN   5           START TIME 
 EF       BSSN   1           LABEL READ/WRITE ERROR FLAG
 EM       BSSN   1           ERROR MESSAGE CM ADDRESS 
          ERRNG  ON-*        DIRECT CELLS OVERFLOW INTO CONSTANTS 
 END      BSSN
  
****
          TITLE  COMMON SUBROUTINES.
***       CID - CHECK ISHARED DEVICE. 
  
  
          ORG    PPFW 
          LJM    PRS         PRESET 
 RESA     EQU    *-1
          LJM    PRX         PRESET *EXECUTE* CALL
 ERR      SPACE  4,10 
***       ERR - ERROR PROCESSOR FOR MS READ OR WRITE ERRORS.
* 
*         ENTRY  (A) = *R* IF READ ERROR, *W* IF WRITE ERROR. 
* 
*         EXIT   TO LOV (3RW).
*                (EF) = ERROR FLAG. 
* 
*         MACROS EXECUTE. 
  
  
 ERR      BSS    0           ENTRY
          STD    EF          SET ERROR FLAG 
          EXECUTE  3RW
          SPACE  4,10 
*         COMMON DECKS. 
  
  
 RLS$     EQU    1           ASSEMBLE *RLS* 
 ISD$     EQU    1           PROCESS ONLY ISHARED DEVICES 
 QUAL$    EQU    1           DO NOT QUALIFY *COMPCLC* 
          LIST   X
*CALL     COMPCLC 
          LIST   *
          SPACE  4,10 
 URSW     EQU    *+5         LOAD ADDRESS FOR *1RU* OVERLAYS
 CID      TITLE  MAIN PROGRAM.
***       CID - CHECK ISHARED DEVICE. 
  
  
*         READ MST AND WRITE IT TO CM.
  
 CID      BSS    0           ENTRY
          ADK    LSLT        SET LABEL SECTOR 
          STD    T7 
          LDC    BFMS 
          RJM    RDS         READ LABEL SECTOR INTO BFMS
          PJN    CID2        IF NO ERROR
          ERROR  ERDE        *READ ERROR* 
  
 CID2     RJM    CLC         CHECK THE LABEL CHECKSUM 
          LMM    CKSS 
          ZJN    CID3        IF CHECKSUM VALID
          ERROR  ECKS        *BAD CHECKSUM ERROR* 
  
 CID3     LDM    N4SS+PFGL*5  CHECK NAME AND DEVICE NUMBER
          LMD    TM 
          ADM    N4SS+PFGL*5+1
          LMD    TM+1 
          ADM    N4SS+PFGL*5+2
          LMD    TM+2 
          ADM    N4SS+PFGL*5+3
          LMD    TM+3 
 CIDA     ZJN    CID4        IF NAME AND DEVICE NUMBER MATCH
*         UJN    CID4        (INITIALIZE PENDING) 
          ERROR  EPNE        *PACKNAME ERROR* 
  
 CID4     LDD    EA 
          ZJN    CID5        IF REPAIR CALL 
          LDM    N4SS+SDGL*5+4
          LPN    76 
          ZJN    CID6        IF SW RESERVE NOT SET
          SHN    -1          GET MID OF MAINFRAME WITH RESERVE
          STD    T1 
          SHN    2
          RAD    T1 
          LDM    DISS-5+4,T1
          STM    RESA 
          LMD    ID 
 CID5     ZJP    CID13       IF IT-S THIS MAINFRAME-S ID
          ERROR  ERES        *RESERVE ERROR*
  
 CID6     STD    CO          CLEAR TRT OFFSET 
          LDD    HN          SET NUMBER OF WORDS TO WRITE TO CM 
          STD    TM 
          LDD    TL 
          STD    TM+1 
          LDM    N4SS+SDGL*5 SET TABLES INCOMPLETE STATUS 
          LPC    -200 
          LMC    200
          STM    N4SS+SDGL*5
          LDD    MS 
          SHN    3
          CWM    N4SS,TR     WRITE GLOBAL MST 
          ADK    SDGL-TDGL-3
          CRD    CN          UPDATE PP COPY OF *SDGL* 
          LDD    TA          GET TRT ADDRESS
          SHN    14 
          LMD    TA+1 
          ADD    DO          ADD DIT OFFSET FOR THE DIT CM ADDRESS
          CWM    DISS,DL
          LDM    N4SS+STLL*5+2
          LMD    ID 
          ZJN    CID10       IF MST/TRT CURRENT IN CM 
  
*         READ TRT AND WRITE IT TO CM.
  
          ERRNZ  TRLT-LSLT-1 TRT DOES NOT FOLLOW LABEL SECTOR 
 CID7     AOD    T7          INCREMENT SECTOR NUMBER
          LDC    -100        DECREMENT TRT WORDS LEFT 
          RAD    TM+1 
          PJN    CID8        IF ONE OR MORE SECTORS OF TRT LEFT 
          RAD    TM 
          SBN    1
          MJN    CID10       IF END OF TRT
          LDN    0
          STD    TM+1 
 CID8     LDC    BFMS        READ NEXT SECTOR 
          RJM    RDS
          PJN    CID9        IF NO ERROR
          ERROR  ERDE        *READ ERROR* 
  
 CID9     LDD    TA 
          SHN    14 
          ADD    TA+1 
          ADD    CO 
          CWM    BFMS+2,TM   WRITE SECTOR OF TRT DATA TO CM 
          LDD    TM 
          RAD    CO 
          UJN    CID7        READ NEXT SECTOR 
  
*         WHEN AN ERROR IS DETECTED DURING THE READ, THE READ IS
*         ATTEMPTED WITH ENDMS ENABLED TO ALLOW DRIVER ERROR PROCESSING 
*         TO OCCUR. AFTER IT IS SUCCESSFULLY READ WITH ENDMS ENABLED, 
*         THE LABEL MUST BE RE-READ WITH ENDMS DISABLED TO ENSURE THAT
*         ALL OF THE SECTORS ARE READ WITH THE HARDWARE RESERVE SET.
  
 CID10    LDM    UERR        CHECK ENDMS DISABLED FLAG
          SHN    21-10
          ERRNZ  EPDE-EPSM-400
          MJN    CID11       IF ENDMS STILL DISABLED
          LJM    PRS7        RESTART READ 
  
*         COMPARE MST COUNTER AND COUNTER AT END OF TRT.
  
 CID11    LDD    T7 
          ZJN    CID12       IF *TRT* NOT READ
          LDM    BFMS+2+77*5+4
          LMD    CN+4 
          SCN    77 
          ADM    BFMS+2+77*5+3
          LMD    CN+3 
          ADM    BFMS+2+77*5+2
          LMD    CN+2 
          ZJN    CID12       IF COUNTERS MATCH
          ERROR  ECDM        *COUNTERS DONT MATCH*
  
 CID12    LDC    -200        CLEAR TABLES INCOMPLETE STATUS 
          RAD    CN 
          LDD    MS 
          SHN    3
          ADK    SDGL 
          CWD    CN 
 CID13    EXECUTE  3RU
          TITLE  PRESET.
 PRS      SPACE  4,25 
***       PRS - PRESET FOR 1RU OVERLAY. 
* 
*         ENTRY  (MB+1) = 12/, 24/ FWA+10B OF PP SAVE AREA, 24/,
*                         IF NOT STAND ALONE CALL.
*                (CHRV) = BIT ZERO SET IF DISK CHANNEL RESERVED.
*                (IR+4) = EST ORDINAL IF STAND-ALONE CALL.
* 
*         EXIT   (CN - CN+4) = (*SDGL*).
*                (DL) = DIT LENGTH. 
*                (DO) = DIT OFFSET FROM BEGINNING OF MST. 
*                (DT) = DEVICE TYPE.
*                (EA) = EXIT ADDRESS = (*FTN*). 
*                       0, IF CALLED BY *1MV* VIA *EXECUTE*.
*                (EF) = 0.
*                (EM) = 0.
*                (ID) = MACHINE ID FOR THIS MAINFRAME.
*                (MS) = MST ADDRESS/10. 
*                (OR - OR+4) = ORIGINAL OUTPUT REGISTER.
*                (RI) = RETURN-ON-INACCESSIBLE FLAG.
*                (SA - SA+1) = FWA + 10B OF PP SAVE AREA. 
*                (SX) = LENGTH OF MESSAGE BUFFER IN CM WORDS. (6) 
*                (TA - TA+1) = FWA OF TRT IN CENTRAL MEMORY.
*                (TL) = TRT LENGTH. 
*                (TM - TM+4) = (*PFGL*).
*                (T5) = MS EST ORDINAL. 
*                (T6) = LABEL TRACK NUMBER. 
  
  
 PRS      BSS    0
          LDM    FTN         SAVE EXIT ADDRESS
          STD    EA 
          LDC    FTN         RESTORE *PAUSE* MACRO IN *PLL* 
          STM    PLLD 
          LDD    IR+1 
          SCN    77 
          SHN    6
          LMD    IR 
          LMC    3RU1R
  
*         ENTER HERE TO RESTART UNIT RESERVATION. 
* 
*         (A) = 0, IF STANDALONE CALL.
*         (EA) = EXIT ADDRESS.
  
 RUR      NJN    PRS1        IF NOT RUNNING STAND-ALONE 
          STD    SA          INDICATE NO SAVE AREA
          STD    SA+1 
          LDK    CTCS 
          STD    OR+3 
          MONITOR  SMDM      PRESET SMDM/CTCS IN *OR* 
          ORG    *-2
          STD    OR 
          LDD    TH          FORCE RETURN-ON-INACCESSIBLE-DEVICE
          STD    RI 
          LDD    IR+4 
          STD    OR+1 
          UJN    PRS2        GET EQUIPMENT INFORMATION
  
 PRS1     LDD    MA          GET SAVE AREA ADDRESS
          ADN    1
          CRD    SA-1 
          LDD    SA          GET ORIGINAL OUTPUT REGISTER 
          SHN    14 
          LMD    SA+1 
          SBN    7
          CRD    OR 
          ADC    .RST+7      WRITE *RST* TO PP SAVE AREA
          CWM    PRSA,TR
          LDD    OR+1        INSURE RETURN-ON-INACCESSIBLE IS SET 
          STD    RI 
          LPC    -1000
          LMD    TH 
          STD    OR+1 
  
*         BEGIN UNIT RESERVE SPECIAL PROCESSING.
  
 PRS2     LPC    777
          STD    T5 
          LDM    CHRV 
          LPN    1
          ZJN    PRS6        IF CHANNEL RESERVE NOT HELD
          LDC    *           ISSUE CONDITIONAL HANG MONITOR FUNCTION
          STD    CM+1 
          LDN    0
          STD    CM+2 
          MONITOR  CHGM 
 PRS6     LDD    EA 
          NJN    PRS7        IF NOT REPAIR CALL 
          SETMS  IO,(AD,DE,DF)
          UJN    RDI         PRESET DIRECT CELLS
  
 PRS7     SETMS  IO,(NS,DE,DF)
*         UJN    RDI         PRESET DIRECT CELLS
 RDI      SPACE 4,10
**        RDI - RETRY DEVICE IDENTIFICATION.
* 
*         ENTRY  (EA) = EXIT ADDRESS. 
*                (T5) = EST ORDINAL.
*                (OR - OR+4) = FUNCTION TO BE ISSUED. 
*                (SA - SA+1) = SAVE AREA ADDRESS. 
*                              0, IF STANDALONE CALL. 
  
  
 RDI      SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    DT-3 
          LDD    MS          GET MST ADDRESS
          SHN    3
          ADK    TDGL        SET TRT LENGTH 
          CRD    TL-2 
          ADN    SDGL-TDGL
          CRD    CN 
          ADN    ALGL-SDGL
          CRD    T6 
          ADN    PFGL-ALGL
          CRD    TM 
          ADN    DULL-PFGL
          CRD    CM+3 
          ADN    STLL-DULL
          CRD    CM 
          ADN    TRLL-STLL
          CRD    TA-3 
          LDD    T6+1        SET LABEL TRACK
          STD    T6 
          LDD    CM 
          LPC    MLIAL+MLIHD+MLIFD
          ZJN    RDI1        IF NO INITIALIZE PENDING 
          ISTORE CIDA,(UJN  CID4)  IGNORE PACKNAME CHECK
 RDI1     LDD    CM+2        SET MACHINE ID 
          STD    ID 
          LDD    CM+3+2      SET MACHINE INDEX
          LPN    17 
          ADN    1
          STD    MI 
          LDD    TL 
          ADN    7           CALCULATE DIT OFFSET 
          SHN    -3 
          ADD    TL 
          STD    DO 
          LDN    MISD        SET CONSTANTS
          STD    DL 
          LDN    6
          STD    SX 
          LDN    0           CLEAR ERROR FLAG 
          STD    EF 
          STD    EM 
          LJM    CID         READ TABLES AND PROCESS FUNCTION 
 RST      SPACE  4,10 
**        RST - RESTORE CALLER. 
* 
*         *RST* IS READ INTO HIGH MEMORY AS *BFMS* IS RESTORED.  IT 
*         RESTORES MEMORY STARTING AT *MSFW*, CLEARS THE PP SAVE AREA 
*         INTERLOCK WORD, AND RETURNS CONTROL TO *FTN*. 
  
  
 PRSA     BSS    0
          LOC    10001-3*5
  
 RST      CRM    /1BP/FBB2,CM+4 
          SBK    PPSA        CLEAR SAVE AREA INTERLOCK
          CWM    RSTA,ON
          LJM    FTN10+3     RETURN TO *FTN*
  
  
 RSTA     BSSZ   5           ZERO WORD
          BSS    10000-*     SPARES 
          LOC    *-10000
 T0       CON    RST-1
          LOC    *O 
  
 .A       SET    RST-/1BP/FBB1
 .RST     EQU    .A/5        WORD ADDRESS OF *RST* IN PP SAVE AREA
          ERRNZ  .A-.RST*5   *RST* MUST BEGIN ON A WORD BOUNDARY
 PRX      SPACE  4,10 
***       PRX - PRESET 1RU FOLLOWING A CALL VIA *EXECUTE*.
* 
*         ENTRY  (IR+3) = FUNCTION CODE.
*                         0 = REPAIR DEVICE.
*                         1 = RETRY PENDING REQUEST.
  
  
 PRX      LDD    IR+3        GET FUNCTION CODE
          NJN    PRX1        IF RETRY REQUEST 
  
*         REPAIR DEVICE.
  
          LDD    IR+2        SET EQUIPMENT
          STD    IR+4 
          LDN    0           SET REPAIR CALL FLAG 
          STD    EA 
          UJN    PRX2        CONTINUE PRESETTING
  
*         RETRY PENDING REQUEST.
  
 PRX1     LDD    SA          GET SAVE AREA ADDRESS
          ADD    SA+1 
 PRX2     LJM    RUR         PRESET REQUEST 
  
          OVERFLOW  PPFW,MSFW+/1BP/PPSA2*5,CMR
          OVERLAY  (RESERVE ISHARED DEVICE.),URSW 
          SPACE  4,10 
***       3RU - RESERVE ISHARED DEVICE. 
*         G. A. SCHUMACHER.  79/08/03.
*         J. J. EIKUM.       81/05/18.
          SPACE  4,10 
***              *3RU* IS CALLED BY *1RU* TO SET THE SOFTWARE RESERVE 
*         ON THE DEVICE.
          SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
* 
*         (TL) = LENGTH OF TRT IN CM WORDS. 
*         (T5) = MS EST ORDINAL.
*         (MS) = MST ADDRESS/10B. 
*         (EF) = ERROR FLAG.
          SPACE  4,10 
***       EXIT CONDITIONS.
* 
* 
*         TO URPX IF NO WRITE ERROR.
*         TO ERR IF LABEL WRITE ERROR.
          SPACE  4,10 
***       NOTE - THIS OVERLAY MUST RESIDE IN *RPL*. 
          EJECT 
***       RID - RESERVE ISHARED DEVICE. 
  
  
 RID      SUBR
          LDD    EA 
          NJN    RID3        IF NOT A REPAIR CALL 
          LDD    EF 
          NJN    RID1        IF ERRORS OCCURRED 
  
*         CHECK FOR SIMULTANEOUS UPDATE BY ANOTHER MAINFRAME. 
  
          LDD    CN+2 
          SBM    N4SS+5*SDGL+2
          MJN    RID2        IF SIMULTANEOUS UPDATE 
          NJN    RID1        IF DISK COPY IS OLDER THAN CM COPY 
          LDD    CN+3 
          SBM    N4SS+5*SDGL+3
          MJN    RID2        IF SIMULTANEOUS UPDATE 
          NJN    RID1        IF DISK COPY IS OLDER THAN CM COPY 
          LDD    CN+4 
          SCN    77          IGNORE INTERLOCK BITS
          LMN    77 
          SBM    N4SS+5*SDGL+4
 RID1     PJP    RID6        IF NOT SIMULTANEOUS UPDATE 
 RID2     ERROR  ESUP        *SIMULTANEOUS UPDATE*
  
 RID3     LDD    EF 
          NJP    RIS         IF ERROR PROCESSING
  
*         VERIFY THAT THE MAINFRAME IS IN THE DIT.
  
          LDD    TA          GET TRT ADDRESS
          SHN    14 
          LMD    TA+1 
          ADD    DO 
          ADD    MI 
          SBN    1
          CRD    CM          GET THIS MAINFRAME-S ID
          LDD    CM+4 
          LMD    ID 
          ZJN    RID4        IF ID MATCHES
          ERROR  EMND        *MACHINE NOT IN DIT ERROR* 
  
*         RESERVE THE DEVICE. 
  
 RID4     STD    T7          RESET SECTOR NUMBER
          RJM    RLS         RECREATE LABEL SECTOR
          LDD    MI          SET SOFTWARE RESERVE 
          SHN    1
          LMM    N4SS+SDGL*5+4
          LPN    76 
          ZJN    RID5        IF THIS MAINFRAME ALREADY HAS INTERLOCK
          RAM    N4SS+SDGL*5+4
          RJM    CLC         UPDATE CHECKSUM
          STM    CKSS 
          LDC    BFMS+WLSF   WRITE LABEL SECTOR WITH SOFTWARE RESERVE 
          RJM    WDS
          PJN    RID5        IF NO WRITE ERROR
          ERROR  ESIN        *LABEL WRITE ERROR* SETTING INTERLOCK
  
 RID5     LDK    RTCL        GET CURRENT TIME 
          CRD    TM 
          LDM    N4SS+SDGL*5 SET TABLES CURRENT FLAG
          LPC    -2000
          LMC    2000 
          STM    N4SS+SDGL*5
          LDD    MS 
          SHN    3
          ADN    SDGL 
          CWM    N4SS+SDGL*5,ON 
          RJM    SRB         SET REISSUE BIT
 RID6     EXECUTE 3RV        WRITE TABLES BACK AND RETURN TO CALLER 
 RIS      SPACE  4,10 
***       RIS - RETURN INACCESSIBLE STATUS. 
* 
*         *RIS* CAUSES THE PP-S REQUESTING RETURN-ON-INACCESSIBLE 
*         DEVICE TO REISSUE THEIR MONITOR FUNCTIONS.  *CPUMTR* WILL 
*         DETECT THE INACCESSIBLE DEVICE STATUS, CLEAR THE PP-S BIT IN
*         *MCLL*, AND CLEAR BYTE 0 OF ITS OUTPUT REGISTER.
* 
*         ENTRY  (A) = (EF) = ERROR FLAG. 
  
  
  
 RIS      SBN    EPRO 
          ZJN    RIS2        IF PROCESSING ERROR
          ERRNZ  EWRC-EPRO   CODE ASSUMES VALUE 
          PJN    RIS1        IF WRITE-TIME ERROR
          LDD    RI          CHECK RETURN-ON-INACCESSIBLE IN CALL 
          SHN    21-11
          PJN    RIS2        IF RETURN-ON-INACCESSIBLE NOT SET
  
*         RETURN TO CALLER. 
  
          LDN    0           CLEAR OUTPUT REGISTER
          STD    OR 
 RIS1     LDN    C1AS        CLEAR *1RU* ACTIVITY IN *MCLL* 
          STD    CM+3 
          LDD    T5 
          STD    CM+1 
          MONITOR  SMDM 
*         LDN    PSNI 
          STM    SRBA        MAKE ONLY ONE PASS IN *SRB*
          RJM    SRB         SET REISSUE BIT FOR ALL PP-S 
          UJP    RID6        RETURN TO CALLER 
  
*         REPLY TO WAITING PP-S, DELAY, THEN RETRY THE REQUEST. 
  
 RIS2     LDK    PSNI 
          STM    SRBA        MAKE ONLY ONE PASS IN *SRB*
          STM    SRBE        REQUIRE RET-ON-INACCESSIBLE TO SET REISSUE 
          STD    T8          INITIALIZE TIMEOUT COUNTER 
          ERRNZ  PSNI-77     CODE ASSUMES VALUE 
          RJM    SRB         SET REISSUE BIT FOR PP-S REQUESTING RETURN 
 RIS2.1   LDD    MS          CHECK SUSPECT FLAG 
          SHN    3
          ADN    DALL 
          CRD    CM 
          LDD    CM 
          SHN    21-7 
          PJN    RIS3        IF SUSPECT HAS CLEARED 
          DELAY  8D*16D      16 MILLISECONDS
          PAUSE 
          LDD    CM+1 
          LMN    ORET 
          ZJN    RIS5        IF OPERATOR *OVERRIDE* 
          SOD    T8          DECREMENT TIMEOUT COUNTER
          PJN    RIS2.1      IF NOT TIMED OUT 
  
*         RESTART REQUEST.
  
 RIS3     LDD    EM 
          ZJN    RIS4        IF NO MESSAGE TO CLEAR 
          CWM    RISA,ON     CLEAR ERROR MESSAGE
 RIS4     LDD    EF 
          SBN    EWRC 
          PJP    RID6        IF WRITE ERROR 
  
*         RETRY REQUEST FROM THE READ.
  
          LDN    1
          STD    IR+3        SET RETRY FUNCTION CODE FOR *1RU*
          ADD    MA 
          CWD    SA-1        REWRITE SAVE AREA ADDRESS IN MB+1
          EXECUTE  1RU
  
 RIS5     MONITOR  DPPM 
          LJM    PPR         EXIT 
  
  
 RISA     CON    0
 SRB      SPACE  4,10 
***       SRB - SET REISSUE BIT FOR PP-S WITH REQUESTS PENDING. 
* 
*         CHECK OUTSTANDING FUNCTIONS MASK AND CAUSE WAITING PPS TO 
*         REISSUE THEIR FUNCTION. 
* 
*         ENTRY  (SRBA) = *PSN*, ONLY ONE PASS IS TO BE MADE. 
*                (SRBE) = *PSN*, IF THE RETURN-ON-INACCESSIBLE BIT
*                         MUST ALSO BE SET BEFORE THE REISSUE BIT WILL
*                         BE SET. 
* 
*         USES   T1, T3, CM - CM+4, CN - CN+4.
  
  
 SRB6     UJN    SRB1        RECHECK
*         PSN                (PROCESS RETURN-ON-INACCESSIBLE FLAG)
 SRBA     EQU    *-1
  
  
 SRB      SUBR               ENTRY/EXIT 
          LDK    PPCP        GET PP COMMUNICATION AREA ADDRESS
          CRD    CM 
          AOD    CM+4 
          STD    T3 
 SRB1     LDN    2           SET PP COUNTER 
          STD    T1 
          LDD    MS          GET OUTSTANDING FUNCTION MASK BITS 
          SHN    3
          ADN    MCLL 
          CRD    CN 
          LDD    CN+1        IGNORE PPS 0 AND 1 
          LPN    77 
          ADD    CN+2 
          ZJN    SRBX        IF NO BITS ARE SET 
 SRB2     LDD    CN+1 
          LPN    77 
          SHN    14 
          ADD    CN+2 
          SHN    21-0 
          STD    CN+2 
          SHN    -14
          STD    CN+1 
          SHN    14 
          PJN    SRB3        IF BIT NOT SET FOR PP
          LDD    T1          SET UP BIT FOR PP MASK 
          SBN    2
          LMD    TH+SHNI* 
          STM    SRBB 
          STM    SRBD 
          LDN    1
 SRBB     SHN    ** 
 SRBC     LPC    0
          NJN    SRB5        IF PP ALREADY PROCESSED
          LDN    1           SET PP PROCESSED BIT 
 SRBD     SHN    ** 
          RAM    SRBC+1 
          SHN    -14
          RAM    SRBC 
          LDD    T1          GET PP REQUEST 
          SHN    3
          ADD    T3 
          STD    T0 
          CRD    CM 
 SRBE     UJN    SRB4        TELL PP TO REISSUE FUNCTION
*         PSN                (PROCESS RETURN-ON-INACCESSIBLE FLAG)
  
          LDD    CM+1 
          SHN    21-11
 SRB3     PJN    SRB5        IF RETURN-ON-INACCESSIBLE FLAG IS NOT SET
 SRB4     LDD    CM          TELL PP TO REISSUE ITS FUNCTION
          LPC    -5000
          LMC    5000 
          STD    CM 
          LDD    T0 
          CWD    CM 
 SRB5     AOD    T1          ADVANCE TO NEXT PP 
          SBN    20D+1
          MJP    SRB2        IF MORE PPS TO CHECK 
          LJM    SRB6        RECHECK IF NECESSARY 
  
  
          OVERFLOW  RIDX,MSFW+/1BP/PPSA2*5,CMR
          OVERLAY  (WRITE MST/TRT/MRT PROCESSOR.),URSW
          SPACE  4,10 
***       3RV - WRITE MST/TRT/MRT PROCESSOR.
*         G. A. SCHUMACHER.  79/08/03.
*         J. J. EIKUM.       81/05/18.
          SPACE  4,10 
***              *3RV* IS CALLED BY *3RU* WHEN THE MST/TRT
*         MUST BE WRITTEN BACK TO THE DEVICE. 
          SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
* 
*         (TL) = LENGTH OF TRT IN CM WORDS. 
*         (T5) = MS EST ORDINAL.
*         (MS) = MST ADDRESS/10B. 
*         (EF) = ZERO.
          SPACE  4,10 
***       EXIT CONDITIONS.
* 
* 
*         TO URPX IF NO WRITE ERROR.
*         TO ERR IF LABEL WRITE ERROR.
          SPACE  4,10 
***       NOTE - THIS OVERLAY MUST RESIDE IN *RPL*. 
          EJECT 
***       WID - WRITE ISHARED DEVICE. 
* 
*         ENTRY  (CN - CN+4) = (*SDGL*), FOR REPAIR CALL ONLY.
  
  
 WID      SUBR
          LDD    EF 
          ZJN    WID3        IF NO ERRORS ENCOUNTERED 
          SBN    EPRO 
          NJP    WID15       IF A READ OR WRITE ERROR 
          STD    EF 
          LJM    WID7        RETRY WRITE
  
 WID3     LDD    EA 
          ZJP    WID8        IF REPAIR CALL 
 WID4     DELAY              WAIT WHILE DISK REVOLVES 
          LDK    RTCL 
          CRD    CM 
          LDD    CM+4 
          SBD    TM+4 
          PJN    WID5        IF TIME HASN-T WRAPPED 
          ADC    10000
 WID5     SBN    14 
          MJN    WID4        IF NOT NEAR END OF REVOLUTION
          LDD    SA 
          SHN    14 
          ADD    SA+1 
          ZJN    WID6        IF RUNNING IN STAND-ALONE PP 
          SBN    6
 WID6     CRM    BFMS,SX
          LDD    MA          MOVE REQUEST PARAMETERS TO CM - CM+4 
          CWD    OR 
          CRD    CM 
          CWM    BFMS,SX     RESTORE REQUEST TIME MESSAGE BUFFER
          LDD    OR          ISSUE FUNCTION 
          RJM    FTN
          LDD    CM+1        CHECK RETURN-ON-INACCESSIBLE-DEVICE
          SHN    21-11
          PJN    WID6.1      IF STANDALONE *1RU* OR ACCESSIBLE DEVICE 
          LDC    4000        SET REISSUE BIT
          RAD    OR 
          LDD    RI 
          STD    OR+1 
          SHN    21-11
          PJN    WID7        IF RETURN-ON-INACCESSIBLE NOT REQUESTED
 WID6.1   LDD    OA          SAVE RESPONSE
          CRD    OR 
          ADN    1
          CRM    BFMS,SX
          LDD    SA 
          SHN    14 
          ADD    SA+1 
          ZJN    WID7        IF RUNNING IN STAND-ALONE PP 
          SBN    6
          CWM    BFMS,SX
  
*         WRITE MST/DIT/TRT/MRT TO THE DISK.
  
 WID7     LCN    0           SET TABLES-CURRENT TIMEOUT 
          STD    T8 
 WID7.1   DELAY  4
          SOD    T8          DECREMENT TIMEOUT COUNTER
          MJN    WID7.2      IF TIMED OUT 
          LDD    MS 
          SHN    3
          ADN    SDGL 
          CRD    CN          GET TABLES-CURRENT FLAG
          ADK    MCLL-SDGL
          CRD    CM          GET LONG-TERM INTERLOCK
          LDD    CN 
          SHN    21-12
          MJN    WID7.1      IF SOME MONITOR FUNCTIONS NOT COMPLETE 
          LDD    CN+4 
          SHN    21-0 
          PJN    WID7.3      IF MST/TRT INTERLOCK NOT SET 
          LDD    CM+1 
          SHN    0-13 
          NJP    WID14       IF LONG-TERM INTERLOCK SET 
 WID7.2   ERROR  EPRO        SET PROCESSING ERROR 
  
 WID7.3   SETMS  =,IO,(NS,DF,SM)  ENABLE ENDMS FOR ERROR PROCESSING 
          LDM    UERR 
          LPC    -EPDE+EPSM 
          STM    UERR 
 WID8     LDD    TL          CALCULATE SECTOR INCREMENT FROM TRT TO MRT 
          ADD    HN 
          SHN    -6 
          STD    T0 
          LDN    MRTL-1-1 
          SBD    T0 
          ADD    MI 
          RAM    WIDA 
          LDN    LSLT        RESET SECTOR NUMBER
          STD    T7 
 WID9     RAD    T7 
          RJM    RLS         RECREATE LABEL SECTOR
          LDM    N4SS+DULL*5 SET SECTOR FOR SECOND COPY OF TABLES 
          STD    TM 
          LDC    BFMS+WCSF
          RJM    WDS
          MJN    WID11       IF ERROR 
*         LDN    0
          STD    CO          CLEAR TRT OFFSET 
          LDD    TL          LOAD NUMBER OF WORDS TO BE WRITTEN 
          RJM    WLT         WRITE TRT TO LABEL TRACK 
 WIDA     LDN    **          ADVANCE TO MRT SECTOR
          RAD    T7 
          LDD    CN 
          SHN    21-10
          PJN    WID10       IF MRT NOT UPDATED 
          LDD    TL          SET NUMBER OF CM WORDS TO BE WRITTEN 
          ADN    7
          SHN    -3          (TRT LENGTH+7)/10B = MRT LENGTH
          RJM    WLT         WRITE MRT TO LABEL TRACK 
 WID10    LDD    TM 
          SBD    T7 
          PJN    WID9        IF SECOND COPY NOT WRITTEN 
          UJN    WID12       CLEAR SOFTWARE RESERVE 
  
 WID11    ERROR  EWET        *WRITE ERROR WRITING TABLES.*
  
*         REWRITE LABEL TO CLEAR SOFTWARE RESERVE.
  
 WID12    LDD    EA 
          ZJP    WID15       IF REPAIR CALL 
          LDC    4000        CLEAR TABLE UPDATE FLAGS 
          STD    CN 
          LDD    CN+4        CLEAR MST/TRT INTERLOCK IN CENTRAL MEMORY
          SCN    76 
          STD    CN+4 
          LDD    MS 
          SHN    3
          ADN    SDGL 
          CWD    CN 
          SETMS  IO,(NS,DE,DF)
*         LDN    0
          ADK    LSLT        REWRITE LABEL
          STD    T7 
          RJM    RLS
          LDC    BFMS+WLSF
          RJM    WDS
          PJN    WID14       IF NO ERROR
          ERROR  EWEL        *LABEL WRITE ERROR*
  
*         COMPLETE UPDATE PROCESSING. 
  
 WID14    LDD    MS          CLEAR PP OUTPUT REGISTER ADDRESS 
          SHN    3
          ADN    MCLL 
          CRD    CN 
          LDN    0
          STD    CN 
          LDD    MS 
          SHN    3
          ADN    MCLL 
          CWD    CN 
 WID15    ENDMS 
  
*         RETURN TO CALLER. 
  
 WID16    LDD    EA          RESTORE EXIT ADDRESS FOR FTN 
          STM    FTN
          NJN    WID17       IF NOT REPAIR CALL 
          LDD    IA          SET REPAIR-ATTEMPTED FOR *1MV* 
          CRD    IR 
          LDD    IR+3 
          SCN    40 
          LMN    40 
          STD    IR+3 
          LDD    IA 
          CWD    IR 
          UJN    WID18       RECALL *1MV* 
  
 WID17    LDD    SA          CHECK FOR STAND-ALONE CALL 
          SHN    14 
          LMD    SA+1 
          NJN    WID19       IF NOT STAND-ALONE CALL
          MONITOR DPPM       DROP PP
 WID18    LJM    PPR         EXIT TO PPR
  
*         RESTORE PP MEMORY AND RETURN TO CALLING ROUTINE.
  
 WID19    SBN    6           GET MESSAGE BUFFER DATA
          CRM    BFMS,SX
          LDD    OA          SET RESPONSE TO FUNCTION 
          CWD    OR 
          LDD    MA          RESTORE THE MESSAGE BUFFER 
          CWM    BFMS,SX
          LDC    /1BP/PPSA1 
          STD    T1 
          LDD    SA 
          SHN    14 
          ADD    SA+1 
          CRM    /1BP/FBB1,T1 
*         LJM    RST
 WLT      SPACE  4,10 
***       WLT - WRITE LABEL TRACK SECTOR TO MS. 
* 
*         ENTRY  (A) = NUMBER OF CM WORDS TO BE WRITTEN TO DISK.
*                (CO) = OFFSET FROM TRT FWA OF DATA TO BE WRITTEN.
*                (T7) = SECTOR NUMBER TO BE WRITTEN.
*                (TA - TA+1) = TRT ADDRESS. 
* 
*         EXIT   (T7) = SECTOR NUMBER OF LAST SECTOR WRITTEN. 
*                (CO) = OFFSET +1 OF LAST DATA WRITTEN. 
* 
*         USES   TM+1, TM+2.
* 
*         CALLS  WDS. 
  
  
 WLT7     LDN    WCSF/10000-WLSF/10000  RESTORE WCSF FUNCTION 
          RAM    WLTA 
  
 WLT      SUBR               ENTRY/EXIT 
          STD    TM+2        SAVE WORD COUNT
          LDD    HN 
          STD    TM+1 
          STM    BFMS+1 
 WLT1     LDC    -100        DECREMENT COUNT OF WORDS TO BE WRITTEN 
          RAD    TM+2 
          PJN    WLT3        IF 100 OR MORE WORDS LEFT
          RAD    TM+1        SET COUNT OF WORDS LEFT
          MJN    WLT7        IF ALL WORDS WRITTEN 
          LDN    0
          STD    TM+2 
          LDD    TM+1 
          STM    BFMS+1 
          LDD    MS          GET CURRENT COUNTER VALUE
          SHN    3
          ADN    SDGL 
          CRM    BFMS+2+77*5,ON 
          LCN    WCSF/10000-WLSF/10000  SET WLSF FUNCTION 
          RAM    WLTA 
 WLT3     AOD    T7 
 WLT4     ADN    1
          STM    BFMS 
          LDD    TA          READ SECTOR OF TRT DATA FROM CM
          SHN    14 
          ADD    TA+1 
          ADD    CO 
          CRM    BFMS+2,TM+1
          LDD    TM+1 
          RAD    CO 
 WLTA     LDC    WCSF+BFMS   WRITE SECTOR OF TRT TO DISK
          RJM    WDS
          PJP    WLT1        IF NO WRITE ERROR
          SHN    21-11
          PJN    WLT6        IF REISSUE OF CURRENT SECTOR NOT POSSIBLE
          LDD    TM+1        BACKUP CM ADDRESS
          STM    BFMS+1 
          LMC    -0 
          RAD    CO 
          LDD    T7 
          UJN    WLT4        RELOAD BUFFER
  
 WLT6     ERROR  EWET        *WRITE ERROR WRITING TABLES.*
  
          OVERFLOW  WIDX,MSFW+/1BP/PPSA2*5,CMR
          OVERLAY  (R/W LABEL ERROR PROCESSOR.),N4SS+PFGL*5+12
          SPACE  4,10 
***       3RW - UNIT RESERVE PROCESSOR. 
*         G. A. SCHUMACHER.  79/08/03.
*         J. J. EIKUM.       81/05/18.
          SPACE  4,10 
***              *3RW* IS CALLED BY *1RU* OR *3RU* WHEN AN ERROR
*         IS DETECTED IN READING OR WRITING THE MS DEVICE LABEL.
          SPACE  4,10 
***       OPERATOR MESSAGES.
* 
* 
*         *1RU LABEL ERROR, M, EQXXX.*
*                M = MODE.
*                    D = DIT ERROR. 
*                    R = READ.
*                    W = WRITE. 
*                XXX = EST ORDINAL OF DEVICE ON WHICH ERROR OCCURRED. 
          SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
*         (EF) = ERROR CODE.
*         (T5) = MS EST ORDINAL.
          SPACE  4,10 
***       EXIT CONDITIONS.
* 
*         TO *URPX*.
          SPACE  4,10 
***       NOTE - THIS OVERLAY MUST RESIDE IN *RPL*. 
          EJECT 
***       LEP - LABEL ERROR PROCESSOR FOR 1RU.
  
  
          ORG    N4SS+PFGL*5+12 
 LEP      SUBR
          LDM    TERP-1,EF   GET PROCESSOR ADDRESS
          STM    LEPB 
          LDM    TERP,EF     GET MESSAGE ADDRESS
          ZJN    LEP3        IF NO MESSAGE
          STD    T1 
          STM    LEPA 
          LDC    2REQ 
          STI    T1 
          LDD    T5          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STM    1,T1 
          LDD    T5          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          SHN    6
          ADC    2R0, 
          STM    2,T1 
 LEP1     LDN    NCPL 
          CRD    CM 
          AOD    CM+1        DISPLAY MESSAGE AT SYSTEM CP 
          SHN    7
          ADN    MS2W 
          STD    EM          SAVE ADDRESS OF *MS2W* BUFFER
          CWM    **,TR
 LEPA     EQU    *-1
 LEP3     LJM    **          JUMP TO PROCESSOR
 LEPB     EQU    *-1
 TERP     SPACE  4,10 
**        TERP - TABLE OF ERROR PROCESSORS. 
  
  
 TERP     BSS    0
          LOC    1
 ERDC     BSS    0           READ TIME ERROR CODES
 ECDM     CON    RME,=C* HARDWARE RESERVE ERROR.*-3 
 ECKS     CON    CKS,=C* LABEL CHECKSUM ERROR.*-3 
 EMND     CON    MND,=C* MACHINE NOT IN DIT.*-3 
 EPNE     CON    PNE,0       PACK NAME ERROR
 ERDE     CON    RDE,=C* LABEL READ ERROR.*-3 
 ERES     CON    RES,=C* INTERLOCKED BY   .*-3
 ESIN     CON    RME,=C* LABEL WRITE ERROR.*-3
  
 EWRC     BSS    0           WRITE TIME ERROR CODES 
 EPRO     CON    RME,=C* PROCESSING ERROR.*-3 
 ESUP     CON    SUP,0       SIMULTANEOUS UPDATE
 EWEL     CON    RME,=C* LABEL WRITE ERROR.*-3
 EWET     CON    SIS,=C* TABLE WRITE ERROR.*-3
          LOC    *O 
  
          USE    LITERALS    FORCE LITERALS HERE
 CKS      SPACE  4,10 
**        CKS - BAD CHECKSUM. 
  
  
 CKS      LDD    EA 
          ZJN    CKS1        IF REPAIR CALL 
          LJM    RME         RELEASE MASS STORAGE EQUIPMENT 
  
 CKS1     LDD    EM          CLEAR ERROR MESSAGE
          CWD    EA 
          LDN    0           CLEAR ERROR FLAG 
          STD    EF 
          STD    EM 
          EXECUTE  3RV       REWRITE THE LABEL TABLES 
 MND      SPACE  4,10 
**        MND - MACHINE NOT IN DIT. 
  
  
 MND      MONITOR  HNGM      HANG ON DIT ERROR
          UJP    LEP1        LOOP ON HANG 
 PNE      SPACE  4,10 
**        PNE - PACK NAME ERROR.
  
  
 PNE      LDC    BFMS 
          STD    IR+2        SET LABEL BUFFER ADDRESS 
          LDD    T5 
          STD    IR+3        SET EST ORDINAL
          LDC    /1RU/RDI 
          STM    EXR         SET RETURN ADDRESS 
          EXECUTE  5ME,*     ISSUE ERROR MESSAGE AND WAIT FOR RESPONSE
          LJM    EXR+1       LOAD *5ME* 
 RDE      SPACE  4,10 
**        RDE - READ ERROR. 
  
  
 RDE      LDD    EA 
          ZJN    CKS1        IF REPAIR CALL 
          LDM    UERR        ENABLE ENDMS FOR ERROR PROCESSING
          LMC    EPDE-EPSM
          STM    UERR 
          SETMS  =,IO,(NS,DF,SM)
          SHN    21-10
          ERRNZ  EPDE-EPSM-1S8  CODE ASSUMES VALUE
          MJN    SDS         IF *ENDMS* ALREADY ENABLED 
          LJM    /1RU/RDI    RETRY READ 
 RES      SPACE  4,10 
**        SOFTWARE RESERVE SET BY ANOTHER MACHINE.
  
  
 RES      LDM    RESA        GET MID OF MACHINE WITH RESERVE
          STM    13,T1
          LDN    RME-RES     CHANGE ERROR PROCESSOR 
          RAM    LEPB 
          LJM    LEP1        DISPLAY MESSAGE
  
  
 RESA     EQU    RESA        BUFFER FOR MID OF MACHINE WITH RESERVE 
 RME      SPACE  4,10 
**        RME - RELEASE MASS STORAGE EQUIPMENT. 
  
  
 RME      ENDMS 
*         UJN    SDS         SET DEVICE SUSPECT 
 SDS      SPACE  4,10 
**        SDS - SET DEVICE SUSPECT. 
  
  
 SDS      LDD    T5          SET SUSPECT
          STD    CM+1 
          LDN    SSES 
          STD    CM+2 
          MONITOR  SEQM 
*         UJN    SIS
 SIS      SPACE  4,10 
**        SIS - SET INACCESSIBLE STATUS.
  
  
 SIS      EXECUTE  3RU       PROCESS RETURN-ON-INACCESSIBLE STATUS
 SUP      SPACE  4,10 
**        SUP - SIMULTANEOUS UPDATE.
  
  
 SUP      MONITOR  HNGM      SET ERROR ON DEVICE
          UJN    SUP         LOOP 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*QUAL$    EQU    0
*CALL     COMPC2D 
  
          OVERFLOW  LEPX,EPFW,CMR 
          OVERLAY  (SET INACCESSIBLE STATUS.),10001-3*5 
 SIA      SPACE  4,10 
***       3RX - SET INACCESSIBLE STATUS.
* 
*         J. M. MAREK.       87/04/30.
 SIA      SPACE  4,10 
***              *3RX* IS CALLED BY *CPUMTR* WHEN AN INACCESSIBLE 
*         STATUS ON AN *ISHARE* DEVICE PREVENTS NORMAL COMPLETION OF
*         THE *AFAM*, *DLKM*, *DTKM*, *RTCM*, *STBM*, OR *VMSM* 
*         FUNCTION.  *3RX* IS EXECUTED VIA THE *BOTM* *PPR* FUNCTION
*         AND SETS STATUS FLAGS TO BE USED BY THE CALLER IN PROCESSING
*         THE INACCESSIBLE DEVICE ERROR.
* 
*         NOTE - THIS PROGRAM MUST BE CM RESIDENT.
 SIA      SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
*         (CM+1 - CM+2) = FWA OF *3RX* IN *RPL*.
*         (CM+3 - CM+4) = *SBFP + 2* ADDRESS IN EXTENDED PP 
*                         COMMUNCATION BLOCK. 
 SIA      SPACE  4,10 
***       EXIT CONDITIONS.
* 
*         (MSD) SUBSYSTEM STATUS UPDATED. 
*         (RDCT) = 0. 
*         (CM - CM+4) = OUTPUT REGISTER.
*         TO *FTN1.0* TO RETURN TO CALLER OF *FTN*. 
  
  
 SIA      BSS    0           ENTRY
          LDD    CM+3        SET DIRECT CELL SAVE ADDRESS 
          SHN    14 
          ADD    CM+4 
          CWD    CN          SAVE (CN - CN+4) 
          SBN    1
          CRD    CN          READ *MSD* PARAMETERS
          LDN    0
          STM    RDCT 
          LDC    3*100       SET READ OFFSET
          LJM    FTN1.2      READ AND EXECUTE NEXT SEGMENT
          BSSZ   10000B-*    SPARE SPACE
          CON    SIA-1       (T0+1) BECOMES (P) 
  
          LOC    10001-3*5
  
 SIA1     LDM    MSD         GET *MSD*
          LPN    77          PRESERVE DRIVER INDENTIFIER
          LMD    CN          UPDATE SUBSYSTEM STATUS
          STM    MSD
          LDD    CM+3        SET DIRECT CELL SAVE ADDRESS 
          SHN    14 
          ADD    CM+4 
          CRD    CN          RESTORE (CN - CN+4)
          SBN    2           READ OUTPUT REGISTER 
          CRD    CM 
          LJM    FTN1.0      RETURN TO *FTN* CALLER 
          BSSZ   10000B-*    SPARE SPACE
          CON    SIA1-1      (T0+1) BECOMES (P) 
 1FA      TTL    PPR/1FA FAST ATTACH SUBFUNCTION PROCESSOR. 
          EJECT 
          QUAL   1FA
          IDENT  1FA,PPFW 
*COMMENT  PPR - FAST ATTACH SUBFUNCTION PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       1FA - FAST ATTACH SUBFUNCTION PROCESSOR.
*         G. A. SCHUMACHER.  79/08/03.
*         J. J. EIKUM.       81/05/18.
*         J. J. EIKUM.       86/11/21.
          SPACE  4,10 
***              *1FA* IS CALLED BY PP RESIDENT WHEN AN *AFAM* MONITOR
*         FUNCTION IS ISSUED ON AN INDEPENDENT SHARED DEVICE. 
          SPACE  4,10 
***       OPERATOR MESSAGES.
* 
* 
*         *EQXXX, 1FA ERROR, M,  FILENAM* 
*                M = MODE.
*                    R = READ.
*                    W = WRITE. 
*                XXX = EST ORDINAL. 
*                FILENAM = FILENAME OF FAST ATTACH FILE INVOLVED. 
          SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
* 
*         LOCATIONS *FAFW* THROUGH *MSD* AND *MSFW* THROUGH *MSFW*+500
*         ARE SAVED IN THIS PP-S SAVE AREA. 
          SPACE  4,10 
***       EXIT CONDITIONS.
* 
* 
*         PP MEMORY IS RESTORED FROM THE PP SAVE AREA.
*         MESSAGE BUFFER IS UPDATED TO INFORMATION RETURNED 
*         BY CPUMTR WHEN THE FUNCTION WAS PROCESSED.
          SPACE  4,10 
***       NOTE - THIS OVERLAY MUST RESIDE IN *RPL*. 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMSPFM 
*CALL     COMS1DS 
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 BEGIN    BSSN   20 
 CN       BSSN   5           CM WORD BUFFER 
 MS       BSSN   1           MST ADDRESS
 SA       BSSN   2           PP SAVE AREA ADDRESS 
 OR       BSSN   5           OUTPUT REGISTER
 EA       BSSN   1           EXIT ADDRESS 
 EF       BSSN   1           ERROR FLAG 
          ERRNG  IR-*        DIRECT CELLS OVERFLOW INTO *IR*
****
          SPACE  4,10 
 FAP      TITLE  MAIN ROUTINE.
          SPACE  4,10 
          ORG    PPFW 
          SPACE  4,10 
**        FAP - MAIN ROUTINE. 
  
  
 FAP      BSS    0           ENTRY
  
*         SET UP SAVE AREA. 
  
          LDM    FTN         SAVE EXIT ADDRESS
          STD    EA 
          LDC    FTN         RESTORE *PAUSE* MACRO IN *PLL* 
          STM    PLLD 
          LDD    MA          GET SAVE AREA ADDRESS
          ADN    1
          CRD    SA-1 
          LDD    SA          GET ORIGINAL OUTPUT REGISTER 
          SHN    14 
          ADD    SA+1 
          SBN    7
          CRD    OR 
          ADC    .RST+7      WRITE *RST* TO PP SAVE AREA
          CWM    PRSA,TR
  
*         CHECK FUNCTION PARAMETERS.
  
          LDD    OR+3 
          SBN    2
          PJN    FAP1        IF ILLEGAL SUBFUNCTION 
          LDD    OR+2 
          LPC    3777 
          SBN    PTLM 
          PJN    FAP1        IF ILLEGAL MODE
          LDM    CHRV 
          LPN    1
          ZJN    FAP1.1      IF CHANNEL NOT RESERVED
 FAP1     MONITOR  CHGM 
          UJN    FAP1        HANG 
  
*         SET RETURN ADDRESS IN CM COPY OF PP ADDRESS ZERO. 
  
*         READ FNT/FST. 
  
 FAP1.1   RJM    IFP         INITIALIZE *COMPGFP* 
          SFA    FNT,OR+4 
          CRM    ERRA+13,ON 
          CRD    T5          SET EST ORDINAL AND TRACK
  
*         READ SYSTEM SECTOR OF REQUESTED FILE. 
  
 FAP1.2   LDN    0           SET SYSTEM SECTOR ADDRESS
          STD    T7 
          SETMS  IO,(NS,DE,DF)
          LDD    CM+4        SET MST ADDRESS
          STD    MS 
 FAP1.3   LDC    BFMS        READ SYSTEM SECTOR 
          RJM    RDS
          PJN    FAP2        IF NO UNRECOVERED ERROR
          ERROR  1RR
  
 FAP2     LDM    UERR        CHECK *ENDMS* DISABLED FLAG
          SHN    21-10
          ERRNZ  EPDE-EPSM-400
          PJN    FAP1.2      IF *ENDMS* ENABLED 
          RJM    CFM         CHECK FILE MODE
          NJN    FAP4        IF ACCESS NOT ALLOWED
 FAP3     LDC    WLSF+BFMS   WRITE SECTOR 
          RJM    WDS
          PJN    FAP5        IF NO WRITE ERROR
          ERROR  1RW
  
 FAP4     LDM    CASS        RETURN NON-ROLLABLE FLAG 
          SHN    1-7
          STD    OR+4 
 FAP5     ENDMS 
  
*         RESTORE PP MEMORY AND RETURN TO CALLING PROGRAM.
  
*         LDN    0           SET RESPONSE 
          STD    OR 
          LDD    OA 
          CWD    OR 
*         LDD    MA          RESTORE THE MESSAGE BUFFER 
*         CWM    MBSA,SX
          LDD    EA          RESTORE EXIT ADDRESS FOR FTN 
          STM    FTN
          LDC    /1BP/PPSA1 
          STD    T1 
          LDD    SA 
          SHN    14 
          ADD    SA+1 
          CRM    /1BP/FBB1,T1 
*         LJM    RST
  
 PRSA     BSS    0
          LOC    10001-3*5
 RST      CRM    /1BP/FBB2,CM+4 
          SBK    PPSA        CLEAR SAVE AREA INTERLOCK
          CWM    RSTA,ON
          LJM    FTN11       RETURN TO *FTN*
  
  
 RSTA     BSSZ   5           ZERO WORD
          BSS    10000-*
          LOC    *-10000     SPARES 
 T0       CON    RST-1
          LOC    *O 
  
 .A       SET    RST-/1BP/FBB1
 .RST     EQU    .A/5        WORD ADDRESS OF *RST* IN PP SAVE AREA
          ERRNZ  .A-.RST*5   *RST* MUST BEGIN ON A WORD BOUNDARY
 CFM      SPACE  4,10 
**        CFM - CHECK FILE MODE.
* 
*         ENTRY  (BFMS) = SYSTEM SECTOR.
*                (OR+2) = ACCESS MODE.
*                (OR+3) = SUBFUNCTION.
*                (T5) = EST ORDINAL.
* 
*         EXIT   SYSTEM SECTOR UPDATED FOR NEW ACCESS MODE. 
*                (OR+1) = 0, IF FILE ACCESS ALLOWED.
*                (OR+1) = 1, IF FILE ACCESS NOT ALLOWED.
*                (A) = (OR+1).
* 
*         USES   CN, OR+1, T1, T2, T3, CM - CM+4. 
* 
*         MACROS MONITOR, SFA.
  
  
 CFM22    MONITOR HNGM
  
 CFM      SUBR               ENTRY/EXIT 
          LDM    CASS        SET CURRENT ACCESS MODE
          LPN    32 
          STD    T3 
          SFA    EST,T5      GET MST ADDRESS
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        GET MACHINE INDEX FROM MST 
          SHN    3
          ADN    DULL 
          CRD    CM 
          LDD    CM+2 
          LPN    17 
          ADN    1
          STD    CN 
          SHN    2
          ADC    UCSS 
          RAD    CN 
          LDD    OR+2 
          LPN    17 
          STD    T1 
          LDM    CFMA,T1     SET PROCESSOR ADDRESS
          NJN    CFM2        IF LEGAL MODE
 CFM1     UJN    CFM22       HANG 
  
 CFM2     STD    T2 
          SFA    FNT,OR+4    READ FST ENTRY 
          ADN    FSTG 
          CRD    CM 
          LDM    CFMB,T1     SET BYTE NUMBERS 
          STD    T1 
          LDD    OR+3 
*         LMN    AFAS 
          ERRNZ  AFAS 
          ZJN    CFM4        IF *ATTACH* SUBFUNCTION
  
*         PROCESS *RETURN* SUBFUNCTION. 
  
          LDD    T1 
          ZJN    CFM3        IF A WRITEABLE MODE
          RAD    CN 
          SOI    CN          DECREMENT LOCAL COUNT
          SOM    UCSS,T1     DECREMENT GLOBAL COUNT 
          MJN    CFM1        IF UNDERFLOW 
          UJN    CFM7        SET RESPONSE 
  
 CFM3     LDD    T3 
          ZJN    CFM1        IF WRITE BITS NOT SET
          SOI    CN          CLEAR LOCAL WRITE BIT
          LDN    0           CLEAR GLOBAL WRITE BITS
          STM    CASS 
          STD    CM+4        CLEAR NON-ROLLABLE FLAG
          UJN    CFM8        SET RESPONSE 
  
*         PROCESS *ATTACH* SUBFUNCTION. 
  
 CFM4     LDD    T3 
          LJM    0,T2        JUMP TO PROCESSOR
  
*         WRITE ACCESS REQUESTED. 
  
 CFM5     ADM    UCSS+1      CHECK IF ANY ACTIVE USERS ON FILE
          ADM    UCSS+2 
          ADM    UCSS+3 
          ADM    UCSS+4 
          NJN    CFM11       IF ACCESS NOT ALLOWED
          LDN    32          SET WRITE USER 
  
*         SET NEW FILE MODE.
  
 CFM6     RAM    CASS        SET NEW FILE MODE
          AOI    CN          SET LOCAL WRITE FLAG 
          LDD    OR+2 
          SHN    21-13
 CFM7     PJN    CFM9        IF NON-ROLLABLE OPTION NOT SPECIFIED 
          LDN    2           SET NON-ROLLABLE FLAG
          STD    CM+4 
          SHN    6
          RAM    CASS 
 CFM8     SFA    FNT,OR+4    UPDATE FST ENTRY 
          ADN    FSTG 
          CWD    CM 
 CFM9     LDN    0
          UJN    CFM16       SET RESPONSE 
  
*         MODIFY ACCESS REQUESTED.
  
 CFM10    ADM    UCSS+1      CHECK FOR W, M, A, U, R/A, R/U OR R USERS
          ADM    UCSS+2 
          ADM    UCSS+3 
 CFM11    NJN    CFM15       IF ACCESS NOT ALLOWED
          LDN    12          SET MODIFY USER
 CFM12    UJN    CFM6        SET FILE MODE
  
*         APPEND ACCESS REQUESTED.
  
 CFM13    ADM    UCSS+1      CHECK FOR W, M, A, U, R/U OR R USERS 
          ADM    UCSS+2 
          NJN    CFM15       IF ACCESS NOT ALLOWED
          LDN    2           SET APPEND USER
          UJN    CFM12       SET NEW FILE MODE
  
*         UPDATE ACCESS REQUESTED.
  
 CFM14    ADM    UCSS+1      CHECK FOR W, M, A, U, R/A OR R USERS 
          ADM    UCSS+3 
          NJN    CFM15       IF ACCESS NOT ALLOWED
          LDN    10 
          UJN    CFM12       SET NEW FILE MODE
  
*         ACCESS NOT ALLOWED. 
  
 CFM15    LDN    1           SET FILE BUSY RESPONSE 
 CFM16    STD    OR+1 
          LJM    CFMX        RETURN 
  
*         READ OR EXECUTE ACCESS REQUESTED. 
  
*         LPN    32          DO NOT ALLOW W, M, A OR U USERS
 CFM17    NJN    CFM15       IF ACCESS NOT ALLOWED
  
*         INCREMENT USER COUNTS.
  
 CFM18    LDD    T1          GET BYTE NUMBERS 
          RAD    CN 
          LDM    UCSS,T1
          LMC    7777 
          ZJN    CFM15       IF USER COUNT OVERFLOW 
          AOM    UCSS,T1     INCREMENT GLOBAL COUNT 
          AOI    CN          INCREMENT LOCAL COUNT
          LDN    0           RETURN FILE ATTACHED RESPONSE
          UJN    CFM16       RETURN 
  
  
*         READ / ALLOW MODIFY ACCESS REQUESTED. 
  
 CFM19    LPN    20          DO NOT ALLOW W USERS 
          NJN    CFM17       IF ACCESS NOT ALLOWED
          UJN    CFM18       INCREMENT USER COUNTS
  
*         READ / ALLOW APPEND ACCESS REQUESTED. 
  
 CFM20    LPN    30          DO NOT ALLOW W, M OR U USERS 
          NJN    CFM17       IF ACCESS NOT ALLOWED
          UJN    CFM18       INCREMENT USER COUNTS
  
*         READ / ALLOW UPDATE ACCESS REQUESTED. 
  
 CFM21    LPN    22          DO NOT ALLOW W, M OR A USERS 
          NJN    CFM17       IF ACCESS NOT ALLOWED
          UJN    CFM18       INCREMENT USER COUNTS
  
  
 CFMA     BSS    0           FILE ATTACH PROCESSORS 
          LOC    0
          CON    CFM5        WRITE
          CON    CFM17       READ 
          CON    CFM13       APPEND 
          CON    CFM17       EXECUTE
          CON    0           NULL 
          CON    CFM10       MODIFY 
          CON    CFM19       READ / ALLOW MODIFY
          CON    CFM20       READ / ALLOW APPEND
          CON    CFM14       UPDATE 
          CON    CFM21       READ / ALLOW UPDATE
          ERRNZ  *-PTLM 
          LOC    *O 
  
  
 CFMB     BSS    0           FILE RETURN FLAGS
          LOC    0
          CON    0           WRITE
          CON    1           READ 
          CON    0           APPEND 
          CON    1           EXECUTE
          CON    0           NULL 
          CON    0           MODIFY 
          CON    4           READ / ALLOW MODIFY
          CON    3           READ / ALLOW APPEND
          CON    0           UPDATE 
          CON    2           READ / ALLOW UPDATE
          ERRNZ  *-PTLM 
          LOC    *O 
 ERR      SPACE  4,10 
***       ERR - READ/WRITE ERROR HANDLER. 
* 
*         ENTRY  (A) = R, IF READ ERROR.
*                (A) = W, IF WRITE ERROR. 
*                (T5) = EQUIPMENT.
* 
*         EXIT   TO MAIN PROGRAM TO RETRY.
  
  
 ERR      BSS    0           ENTRY
          STD    EF 
          SHN    6
          LMN    1R,
          STM    ERRA+11
          LMC    2RR, 
          NJN    ERR1        IF NOT READ ERROR
          LDM    UERR        ENABLE *ENDMS* FOR ERROR PROCESSING
          LMC    EPDE-EPSM
          STM    UERR 
          SETMS  =,IO,(NS,DF,SM)
          SHN    21-10
          ERRNZ  EPDE-EPSM-1S8  CODE ASSUMES VALUE
          PJP    FAP1.3      IF *ENDMS* NOW ENABLED 
 ERR1     ENDMS 
          LDD    T5          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STM    ERRA+1 
          LDD    T5          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          SHN    6
          ADC    2R0, 
          STM    ERRA+2 
          LDM    ERRA+13+3   TERMINATE FILENAME 
          SCN    17 
          STM    ERRA+13+3
          LDD    IR+1 
          LPN    37 
          NJN    ERR2        IF NOT AT CONTROL POINT 0
          LDN    NCPL 
          CRD    CM 
          AOD    CM+1 
 ERR2     SHN    7
          STD    CP 
          ADN    MS2W 
          CWM    ERRA,TR
          LDK    INWL        CHECK FOR DEADSTART IN PROGRESS
          CRD    CM 
          LDD    CM+3 
          LPN    12 
          ZJN    ERR3        IF DEADSTART COMPLETE, SCHEDULING ENABLED
          STM    ERRB        FORCE RETRY
          UJN    ERR4        DELAY
  
 ERR3     LDD    SA 
          SHN    14 
          LMD    SA+1 
          SBN    7           CHECK RETURN-ON-INACCESSIBLE IN CALL 
          CRD    CM 
          LDD    CM+1 
          SHN    21-11
          MJP    FAP5        IF RETURN-ON-INACCESSIBLE SET
 ERR4     DELAY  4
          PAUSE 
          LDD    CM+1 
          LMN    ORET 
          NJN    ERR5        IF NOT OPERATOR *OVERRIDE* 
          MONITOR  DPPM 
          LJM    PPR         EXIT 
  
 ERR5     LDD    MS 
          SHN    3
          ADN    DALL 
          CRD    CM 
          LDD    CM 
          SHN    21-7 
 ERRB     MJN    ERR4        IF STILL INACCESSIBLE
*         PSN                (DEADSTART IN PROGRESS)
  
*         RESTART REQUEST.
  
          LDN    0
          STD    CM 
          LDD    CP 
          ADN    MS2W 
          CWD    CM          CLEAR ERROR MESSAGE
          LJM    FAP1.2      RETRY REQUEST
  
  
 ERRA     DATA   C*EQXXX, 1FA ERROR, M,  FILENAM* 
          SPACE  4,10 
 QUAL$    SET    0
 COMMON   SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPC2D 
 FNT$     SET    1           ASSEMBLE FNT ADDRESSING IN *COMPGFP* 
 IFP$     EQU    1           ASSEMBLE REMOTE INITIALIZATION 
*CALL     COMPGFP 
          SPACE  4,10 
**        ASSEMBLE *COMPGFP* INITIALIZATION CODE. 
  
 IFP      HERE
          OVERFLOW  PPFW,MSFW+/1BP/PPSA2*5,CMR
 1CP      TTL    PPR/1CP - SET CONTROL POINT ASSIGNMENT.
          TITLE 
          QUAL   1CP
          IDENT  1CP,CCP
*COMMENT  PPR - SET CONTROL POINT ASSIGNMENT. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 1CP      SPACE  4,10 
***       1CP - SET CONTROL POINT ASSIGNMENT. 
* 
*         G. S. YODER        90/06/04.
 1CP      SPACE  4,10 
***              *1CP* IS CALLED BY *CPUMTR* TO COMPLETE THE PROCESSING 
*         OF THE *CCAM* FUNCTION.  *1CP* IS EXECUTED VIA THE *BOTM* 
*         *PPR* FUNCTION AND SETS ADDRESSES IN *PPR* FOR THE NEW
*         CONTROL POINT BEFORE RETURNING TO THE CALLER. 
* 
*         NOTE - THIS PROGRAM MUST BE CM RESIDENT.
 1CP      SPACE  4,10 
***       ENTRY CONDITIONS. 
* 
*         (CM+1 - CM+2) = FWA OF *1CP* IN *RPL*.
*         (CM+3 - CM+4) = *SBFP + 2* ADDRESS IN EXTENDED PP 
*                         COMMUNICATION BLOCK.
 1CP      SPACE  4,10 
***       EXIT CONDITIONS.
* 
*         CONTROL POINT ACCESS ADDRESSES UPDATED. 
*         (CM - CM+4) = OUTPUT REGISTER.
*         TO *FTN1.0* TO RETURN TO CALLER OF *FTN*. 
 1CP      SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 CN       EQU    20          CM WORD BUFFER (5 LOCATIONS) 
  
****
  
  
          ORG    10001-3*5
  
  
 CCP      BSS    0           ENTRY
          LDD    CM+3        SET DIRECT CELL SAVE ADDRESS 
          SHN    14 
          ADD    CM+4 
          CWD    CN          SAVE (CN - CN+4) 
          SBN    1           READ PARAMETERS
          CRD    CN 
          LDD    CN          SET CP/PCP NUMBER FOR MOVE CHECK 
          STM    FTNG 
          LDC    3*100       SET READ OFFSET
          LJM    FTN1.2      READ AND EXECUTE NEXT SEGMENT
          BSSZ   10000B-*    SPARE SPACE
          CON    CCP-1       (T0+1) BECOMES (P) 
  
          LOC    10001-3*5
  
 CCP1     LDD    CN+1        SET *FLSW* ADDRESS 
          LMC    LDCI 
          STM    FTNC 
          LDD    CN+2 
          STM    FTNC+1 
          LDD    CN+4        SET *CP* 
          STD    CP 
          LDC    6*100       SET READ OFFSET
          LJM    FTN1.2      READ AND EXECUTE NEXT SEGMENT
          BSSZ   10000B-*    SPARE SPACE
          CON    CCP1-1      (T0)+1 BECOMES (P) 
  
          LOC    10001-3*5
  
 CCP2     LDD    CM+3        SET DIRECT CELL SAVE ADDRESS 
          SHN    14 
          ADD    CM+4 
          CRD    CN          RESTORE (CN - CN+4)
          SBN    2           READ OUTPUT REGISTER 
          CRD    CM 
          LJM    FTN1.0      RETURN TO *FTN* CALLER 
          BSSZ   10000B-*    SPARE SPACE
          CON    CCP2-1      (T0)+1 BECOMES (P) 
          TTL    PPR/1RP - RELOAD PP RESIDENT.
          TITLE 
          QUAL   1RP
          IDENT  1RP,RLP
*COMMENT  PPR - RELOAD PP RESIDENT. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       1RP - RELOAD PP RESIDENT. 
*         G. R. MANSFIELD.   70/07/17.
*         R. E. TATE.        73/01/05.
          SPACE  4
***              1RP MAY BE CALLED BY A PP TO RESTORE THAT PP-S COPY
*         OF PP RESIDENT.  WHEN 1RP IS READY TO TRANSMIT PP RESIDENT, 
*         BYTE 2 OF 1RP-S INPUT REGISTER IS SET TO 7777B.  1RP THEN 
*         WAITS FOR BYTE 2 OF THE INPUT REGISTER TO BE SET TO 0.
*         IF THIS DOES NOT TAKE PLACE WITHIN 1 SECOND, 1RP EXITS, 
*         THUS ABORTING THE LOAD.  THE DATA TRANSFER IS MADE 6 CM WORDS 
*         AT A TIME THROUGH THE MESSAGE BUFFER.  BYTE 4 OF THE CALLING
*         PPU,S OUTPUT REGISTER IS USED AS THE FULL/EMPTY FLAG.  END
*         OF DATA IS SIGNIFIED BY A LESS THAN 6 WORD TRANSFER.
*         THE CALLING PROGRAM CLEARS THE OUTPUT REGISTER TO INDICATE
*         EMPTY BUFFER AND *1RP* SETS BYTE 4 TO INDICATE FULL BUFFER. 
          SPACE  4
***       CALL. 
* 
* 
*T        18/1RP,6/0,12/0,12/0,12/IA
*         IA = CALLER-S INPUT REGISTER ADDRESS. 
* 
*         CALLER,S OUTPUT REGISTER. 
* 
*T OR     12/0,12/0,12/0,12/0,12/NOOC 
* 
*         N = 4 - BUFFER FULL.
*         C = NUMBER OF WORDS.
          SPACE  4
***       DAYFILE MESSAGES. 
* 
* 
*         NONE. 
          SPACE  4
***       OPERATOR MESSAGES.
* 
* 
*         NONE. 
          SPACE  4
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 CN       EQU    20          CM WORD BUFFER (5 LOCATIONS) 
  
****
 RLP      TITLE  MAIN PROGRAM.
***       RLP - MAIN PROGRAM. 
  
  
          ORG    PPFW 
 RLP      RJM    PRS         PRESET PROGRAM 
  
*         INITIATE TRANSMISSION.
  
  
          LCN    0           SET TRANSMIT REQUEST 
          STD    IR+2 
          LDD    IA 
          CWD    IR 
          LCN    0           SET TIMER
          STD    T1 
 RLP1     SOD    T1 
          ZJN    RLP4        IF TIME UP 
          LDD    IA          READ RESPONSE
          CRD    CM 
          LDD    CM+2 
          NJN    RLP1        IF RECEIVE NOT READY 
  
*         TRANSMIT *PPR*. 
  
 RLP2     LDN    77          DELAY
          SBN    1
          NJN    *-1
          LDD    IR+3        CHECK OUTPUT REGISTER
          CRD    CM 
          LDD    CM+4 
          NJN    RLP2        IF NOT READY FOR NEXT WORD 
          LDN    5*6         UPDATE BUFFER ADDRESS
          RAM    RLPA 
          ADC    -MSFW
          PJN    RLP3        IF TRANSFER COMPLETE 
          LDD    T6          TRANSFER DATA BLOCK TO MESSAGE BUFFER
          CWM    100-5*6,T7 
 RLPA     EQU    *-1
          SBN    7           SET FULL FLAG
          CWM    RLPD,ON
          UJN    RLP2        LOOP 
 RLP3     LCN    6           SET LAST TRANSFER FLAG 
          RAM    RLPD+4 
          LDD    IR+3        SET RANSFER COMPLETE FLAG
          CWM    RLPD,ON
  
 RLP4     LDC    *           RESET EXCHANGE ADDRESS 
 RLPB     EQU    *-1
          STM    XJ3
          STM    XJ4
          LDC    *
 RLPC     EQU    *-1
          STM    XJ3+1
          STM    XJ4+1
          ADN    6           RESET EXCHANGE PACKAGE MA ADDRESS
          STM    XJ2+1
          SHN    -14
          ADM    RLPB 
          STM    XJ2
  
*         DROP PP.
  
          MONITOR DPPM       DROP PP
          LJM    PPR         EXIT TO PP RESIDENT
  
 RLPD     CON    0           FULL FLAG WORD 
          CON    0
          CON    0
          CON    0
          CON    4006 
 PRS      SPACE  4
**        PRS - PRESET PROGRAM. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          LDN    6           SET CONSTANT 
          STD    T7 
          LDD    IR+4        SET OUTPUT REGISTER ADDRESS
          ADN    1
          STD    IR+3 
          ADN    1           SET MESSAGE BUFFER ADDRESS 
          STD    T6 
          LDM    XJ3         SAVE EXCHANGE PACKAGE
          STM    RLPB 
          LDM    XJ3+1
          STM    RLPC 
          LDN    PXPP        READ PP EXCHANGE STATUS
          CRD    CN 
          LDN    PPCP        READ PP COMMUNICATION POINTER
          CRD    CM 
          LDD    IR+4        SET PP NUMBER * 21 
          SBD    CM+4 
          SBN    20 
          SHN    -3 
          STD    T1 
          SHN    4
          ADD    T1 
          RAD    CN+4        SET EXCHANGE ADDRESS 
          STM    XJ3+1
          STM    XJ4+1
          SHN    -14
          RAD    CN+3 
          LMC    LDCI 
          STM    XJ3
          STM    XJ4
          LDD    CN+4        SET EXCHANGE PACKAGE MA ADDRESS
          ADN    6
          STM    XJ2+1
          SHN    -14
          ADD    CN+3 
          LMC    LDCI 
          STM    XJ2
          SETMS  NODRIVER    FORCE DRIVER RELOAD ON NEXT *SETMS*
          LJM    PRSX        RETURN 
          TTL    PPR - PP RESIDENT. 
 7SE      MSOVL  7656,T2,EPFW-1,(PROCESS SYSTEM DEVICE ERROR.)
          SPACE  4
***       7SE - PROCESS SYSTEM DEVICE ERRORS. 
*         W. E. GOEBEL.      76/01/01.
          SPACE  4
***              7SE IS CALLED BY PPR TO PROCESS ERRORS ENCOUNTERED 
*         WHILE LOADING PROGRAMS FROM A SYSTEM DEVICE.  IF THE LOAD 
*         WAS FROM AN ALTERNATE SYSTEM DEVICE THE DIRECTORY ENTRY FOR 
*         THAT PROGRAM WILL BE CHANGED SO ALL FURTHER LOADS WILL GO 
*         TO THE SYSTEM DEVICE. IF THE ERROR WAS NOT ON AN ALTERNATE
*         SYSTEM DEVICE *7SE* RETURNS TO *PPR - PLL* TO RETRY THE LOAD. 
*         THE REPLACEMENT ENTRIES FOR ALTERNATE SYSTEM PLD ENTRIES ARE
*         FOUND BY SEARCHING BACKWARDS FROM THE START OF THE PLD. 
*         WHEN A REPLACEMENT ENTRY IS FOUND IT IS COPIED ON TOP OF
*         THE PLD ENTRY THUS FORCING ALL FURTHER LOADS OF THAT PROGRAM
*         TO THE SYSTEM DEVICE. 
*                7SE IS A ROUTINE LOADED IN THE DISK ERROR PROCESSING 
*         AREA. 
*                7SE IS REQUIRED TO BE CM RESIDENT. 
          SPACE  4
***       ENTRY.
* 
* 
*         (PLLA - PLLA+1) = PROGRAM BEING LOADED AT THE TIME OF THE 
*         ERROR, IF CALLED FROM *PLL*.
*         ((T8) - (T8)+1) = PROGRAM BEING LOADED AT THE TIME OF THE 
*         ERROR, IF *7SE* CALLED DIRECTLY FROM *EXR*. 
*         IF *7SE* NOT CALLED DIRECTLY FROM *EXR* - 
*         (T3) = BUFFER ADDRESS OF SECTOR BEING LOADED WHEN THE 
*                ERROR OCCURED. 
*         (T8) = WORD TO BE RESTORED TO FIRST LINKAGE BYTE. 
*         (T9) = WORD TO BE RESTORED TO SECOND LINKAGE BYTE.
 7SE      TITLE  MAIN PROGRAM.
 DSE      ENTRY              *7SE* ENTRY
  
 SDE      LDI    T1          CHECK FOR DIRECT CALL TO *0SE* 
          LMN    1R7
          NJN    SDE1        IF NOT DIRECT CALL 
          LDM    EXR         SET EXIT ADDRESS 
          STM    SDEB 
          LDD    T8          SET PROGRAM NAME POINTER 
          STD    T1 
          ADN    1
          STD    T2 
          UJN    SDE2        CHECK LIBRARY
  
 SDE1     LDD    T8          RESTORE TWO BYTES
          STI    T3 
          LDD    T9 
          STM    1,T3 
  
*         CHECK LIBRARY FOR ALTERNATE SYSTEM RESIDENCE
  
 SDE2     LDI    T1          SET PROGRAM NAME IN REQUEST
          STD    CM+2 
          LDI    T2 
          STD    CM+3 
          MONITOR SPLM       SEARCH PERIPHERAL LIBRARY
          LDD    CM+1 
          SCN    77 
          NJN    SDE4        IF CM RESIDENT OR NOT FOUND
          SFA    EST,CM+1    READ EQUIPMENT EST 
          ADK    EQDE 
          CRD    T4 
          LDD    T4 
          SHN    21-12
          PJN    SDE5        IF NOT SYSTEM DEVICE 
 SDE4     LJM    PLL2        PROCEED WITH PROGRAM LOAD
 SDEB     EQU    *-1         (EXIT ADDRESS) 
  
*         SEARCH DIRECTORY FOR ENTRY. 
  
 SDE5     LDC    PLDP        FETCH PLD POINTER
          CRD    T4 
          CRD    T6 
          LDD    T4          READ DIRECTORY ENTRY 
 SDE6     SHN    14 
          LMD    T5 
          ZJN    SDE5        IF LIBRARY LOCKED
          RJM    CFP         CHECK FOR PROGRAM
          ZJN    SDE7        IF PROGRAM FOUND 
          AOD    T5          INCREMENT DIRECTORY ADDRESS
          SHN    -14
          RAD    T4 
          UJN    SDE6        LOOP FOR NEXT ENTRY
  
*         SEARCH ALTERNATE SYSTEM REPLACEMENT ENTRIES.
  
 SDE7     SOD    T6+1        SET NEXT ENTRY 
          PJN    SDE8        IF NO BORROW 
          SOD    T6 
          AOD    T6+1 
 SDE8     LDD    T6          READ REPLACEMENT ENTRY 
          SHN    14 
          LMD    T6+1 
          RJM    CFP         CHECK FOR PROGRAM
          NJN    SDE7        IF PROGRAM NOT FOUND 
          LDD    T4          WRITE REPLACEMENT ENTRY TO *PLD* 
          SHN    14 
          LMD    T5 
          CWD    CM 
          LJM    SDE2        RETURN PROCESSING
 CFP      SPACE  4
**        CFP - CHECK FOR PROGRAM.
* 
*         ENTRY  (A) = ADDRESS OF PLD ENTRY TO CHECK. 
*                ((T1)) = FIRST CHARACTER OF PROGRAM NAME.
*                ((T2)) = LAST TWO CHARACTERS OF PROGRAM NAME.
* 
*         EXIT   (A) = 0 IF ENTRY MATCHES.
*                (CM - CM+4) = PLD ENTRY. 
  
  
 CFP      SUBR               ENTRY/EXIT 
          CRD    CM 
          LDD    CM+1        CHECK FOR CORRECT PROGRAM FOR REPLACEMENT
          SCN    77 
          LMI    T1 
          SHN    6
          LMD    CM 
          SHN    6
          LMI    T2 
          UJN    CFPX        RETURN 
          SPACE  4
          ERRNG  10000-*     *7SE* HAS OVERFLOWED 
          BSS    10000-*     SPARES 
          CON    DSE-1       (T0) = ENTRY ADDRESS - 1 
          CON    PLLA        ((T1)) = FIRST CHARACTER OF PROGRAM NAME 
          CON    PLLB        ((T2)) = LAST TWO CHARACTERS OF NAME 
          ERRNZ  LN-*        INCORRECT PROGRAM LENGTH 
          QUAL   *
 7EK      MSOVL  7662,T1,DDMD+4,(ERROR MESSAGE GENERATOR.)
 7EK      SPACE  4,10 
***       7EK - ERROR MESSAGE GENERATOR.
*         P. C. SMITH.       91/12/05.
 7EK      SPACE  4,10 
***              *7EK* IS CALLED BY THE ERROR PROCESSOR IN THE RESIDENT 
*         DRIVER TO GENERATE APPROPRIATE BML, ERRLOG AND DAYFILE
*         MESSAGES AND TO DETERMINE THE CORRECT ADDRESS AT WHICH TO 
*         RESUME PROCESSING.  *7EK* BEGINS THE PROCESS BY INITIALIZING
*         THE AREA WHERE THE BML MESSAGE HEADER IS TO BE BUILT AND BY 
*         FILLING IN MANY OF THE FIELDS WHICH ARE COMMON TO ALL DRIVER
*         BML MESSAGES.  *7EK* THEN CALLS *7EL* TO CONTINUE BUILDING
*         THE BML MESSAGE.
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
          QUAL
 WB       EQU    LA - LA+4   CM WORD BUFFER 
          ERRNZ  CM+5-WB     DIRECT CELLS MUST BE CONTIGUOUS
          QUAL   *
****
 7EK      SPACE  4,35 
**        EKG - ERROR MESSAGE GENERATOR.
* 
*         ENTRY  (T2) = READ BUFFER ADDRESS.
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (DEDT) = ERROR PROCESSING CONTROL WORD.
*                (DEEC) = ERROR CODE. 
*                (MSFW) = INITIAL CHANNEL IF *6DI* OR *6DP*.
*                (MB+1) = PHYSICAL DISK ADDRESS FROM *LDAM*.
*                (MB+2 - MB+5) = DRIVER DEPENDENT PART OF BML MESSAGE 
*                                (FOR FORMAT, SEE INDIVIDUAL DRIVERS).
* 
*         EXIT   TO *7EL*.
*                (T2) = UNCHANGED.
*                (T4 - T7) = UNCHANGED. 
*                (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = PARTIAL BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB) = ORIGINAL (T3 - T7). 
*                (MB+1) = ORIGINAL (WB - WB+4). 
*                (MB+2 - MB+5) = UNCHANGED. 
* 
*         USES   CM - CM+4, WB - WB+4, T1, T3.
* 
*         MACROS MONITOR, MSERR.
  
  
 EKG      ENTRY              *7EK* ENTRY
          LDM    DEEC 
          STM    DDMD 
          LMK    ADDE 
          NJN    EKG1        IF NOT AN ADDRESS ERROR
  
*         THE *CHGM* MONITOR FUNCTION IS ISSUED FOR ADDRESS ERRORS
*         SINCE THESE ARE OFTEN CAUSED BY OPERATING SYSTEM PROBLEMS 
*         RATHER THAN HARDWARE FAILURE. 
  
          STD    CM+2 
          LDC    *
          STD    CM+1 
          MONITOR  CHGM 
  
*         SAVE CELLS (T3 - T7) AND (WB - WB+4) IN THE MESSAGE BUFFER
*         TO PROVIDE SCRATCH SPACE IN THE OVERLAY FOR READING IN
*         DATA.  INITIALIZE THE BML MESSAGE HEADER TO ZEROS.
*         ADD EST ORDINAL, MACHINE ID, LINK CODE AND PHYSICAL UNIT
*         NUMBER TO THE MESSAGE HEADER. 
  
 EKG1     LDD    MA 
          CWD    T3          SAVE CELLS (T3 - T7) 
          ADN    1
          CRD    CM          GET PHYSICAL DISK ADDRESS
          CWD    WB          SAVE CELLS (WB - WB+4) 
          LDK    ZERL 
          CRM    MSGH,ON     CLEAR *EMB* MESSAGE HEADER 
          SBN    1
          CRM    HEDR,ON     CLEAR BML MESSAGE HEADER 
          SBN    1
          CRM    HEDR+5,ON
          SBN    1           CLEAR POTENTIALLY UNUSED FIELDS
          CRM    DDMD+1,ON
          LDN    MLDY 
          STM    MSGH+4      SET DESTINATION DAYFILE
          LDM    DEDT 
          LPN    17 
          SBK    /COMSDFS/D6DI
          ERRNZ  /COMSDFS/D6DJ-/COMSDFS/D6DI  CODE ASSUMES VALUES 
          NJN    EKG2        IF NOT *6DI* 
          LDD    CM+1 
          LPN    77 
          STM    HEDR+3      ADD PHYSICAL UNIT NUMBER TO MESSAGE
          LDD    CM+2 
          STM    DDMD+1      INSERT CYLINDER NUMBER 
          LDD    CM+3 
          SHN    6
          LMD    CM+4        MERGE TRACK AND SECTOR 
          STM    DDMD+2 
          LDM    DELF        SET LAST FUNCTION
          STM    DDMD+3 
          LDM    DEGS        INSERT GENERAL STATUS
          STM    DDMD+4 
 EKG2     LDK    PPCP        ADD LINK CODE (PP NUMBER) TO MESSAGE 
          CRD    CM 
          ADK    MMFL-PPCP
          CRD    WB 
          LDD    WB          ADD MACHINE ID TO MESSAGE
          STM    HEDR+10
          LDD    IA 
          SBD    CM+4 
          SHN    3
          RAM    HEDR+2 
          MSERR  7EL         EXECUTE *7EL*
          SPACE  4,10 
          ERRNG  10000-*     *7EK* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    EKG-1       (T0) = ENTRY ADDRESS - 1 
          CON    0           (T1) = 0 
*                            (T2) = READ BUFFER ADDRESS 
          ERRNZ  LN-*        INCORRECT *7EK* OVERLAY LENGTH 
          QUAL   *
 7EL      MSOVL  7554,T1,DDMD+4,(ERROR MESSAGE GENERATOR.)
          SPACE  4,10 
***       7EL - ERROR MESSAGE GENERATOR.
*         K. F. REHM.        84/02/01.
          SPACE  4,10 
***              *7EL* IS CALLED BY *7EK* TO CONTINUE BUILDING THE
*         BML MESSAGE HEADER.  *7EL* DETERMINES THE BML MESSAGE ID
*         FOR THE DEVICE IN QUESTION.  *7EL* THEN CALLS *7EM* TO
*         CONTINUE THE MESSAGE BUILDING PROCESS.
          SPACE  4,10 
**        ELG - ERROR MESSAGE GENERATOR.
* 
*         ENTRY  (T1) = BASE ADDRESS OF MESSAGE ID TABLE. 
*                (T2) = READ BUFFER ADDRESS.
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (DEEC) = ERROR CODE. 
*                (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
*                (ERXA) = EXIT ADDRESS. 
*                (UERR) = ERROR PROCESSING OPTIONS. 
*                (MSFW) = INITIAL CHANNEL IF *6DI* OR *6DP*.
*                (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = PARTIAL BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB) = ORIGINAL (T3 - T7). 
*                (MB+1) = ORIGINAL (WB - WB+4). 
*                (MB+2 - MB+5) = DRIVER DEPENDENT PART OF BML MESSAGE 
*                                (FOR FORMAT, SEE INDIVIDUAL DRIVERS).
* 
*         EXIT   TO *7EM*.
*                (T2) = UNCHANGED.
*                (T4 - T7) = UNCHANGED. 
*                (WB+3 - WB+4) = ADDRESS OF BEGINNING OF TRT. 
*                (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = PARTIAL BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB) = ORIGINAL (T3 - T7). 
*                (MB+1) = ORIGINAL (WB - WB+4). 
*                (MB+2 - MB+5) = UNCHANGED. 
* 
*         USES   T1, T3, CM - CM+4, WB - WB+4.
* 
*         MACROS MSERR, SFA.
  
  
 ELG      ENTRY              *7EL* ENTRY
  
*         DETERMINE THE APPROPRIATE BML MESSAGE IDENTIFIER TO BE
*         ADDED TO THE MESSAGE.  FOR DISKS, THE MESSAGE ID CAN BE 
*         DETERMINED FROM THE DEVICE CODE.  FOR EXTENDED MEMORY,
*         IT MUST BE DETERMINED FROM DATA IN WORD *DILL* OF THE MST.
  
          LDD    T5          ADD EST ORDINAL TO MESSAGE 
          STM    HEDR+5 
          SFA    EST         READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+3        SAVE DEVICE CODE 
          STD    T3 
          LMC    2RDE 
          ZJN    ELG2        IF A *DE* TYPE DEVICE
          LMN    2RDP&2RDE
          NJN    ELG3        IF NOT A *DP* TYPE DEVICE
 ELG2     LDD    CM+4        GET MST WORD *DILL*
          SHN    3
          ADK    DILL 
          CRD    CM 
          ADK    TRLL-DILL
          CRD    WB 
          LDD    CM+3        USE *DILL* DATA FIELDS 
          LPC    707
          STD    T3 
          LDC    MSEID-2     SET TABLE ADDRESS
          STD    T1 
 ELG3     LDN    2           CHECK NEXT TABLE ENTRY 
          RAD    T1 
          LDI    T1          GET MESSAGE ID 
          ZJN    ELG4        IF END OF TABLE
          LMD    T3 
          NJN    ELG3        IF NOT A MATCH 
          LDM    1,T1        GET MESSAGE ID 
 ELG4     STM    HEDR+0 
          MSERR  7EM         EXECUTE *7EM*
 MSGID    SPACE  4,10 
*         MSGID - TABLE OF MESSAGE ID-S FOR NON-EXTENDED MEMORY DEVICES.
  
  
 MSGID    BSS    0
          CON    2RDI,/COMSDFS/RM0002   (DI)  844-2X, HALF TRACK
          CON    2RDJ,/COMSDFS/RM0003   (DJ)  844-4X, HALF TRACK
          CON    2RDK,/COMSDFS/RM0004   (DK)  844-2X, FULL TRACK
          CON    2RDL,/COMSDFS/RM0005   (DL)  844-4X, FULL TRACK
          CON    2RDV,/COMSDFS/RM0006   (DV)  819, SINGLE DENSITY 
          CON    2RDW,/COMSDFS/RM0006   (DW)  819, DOUBLE DENSITY 
          CON    2RDM,/COMSDFS/RM0007   (DM)  885, HALF TRACK 
          CON    2RDQ,/COMSDFS/RM0017   (DQ)  885, FULL TRACK 
          CON    2RDR,/COMSDFS/RM0015   (DR)  CDSS II 
          CON    2RDX,/COMSDFS/RM0010   (DX)  3330-1
          CON    2RDY,/COMSDFS/RM0011   (DY)  3330-11 
          CON    2RDZ,/COMSDFS/RM0012   (DZ)  3350
          CON    2RDA,/COMSDFS/RM0013   (DA)  33502 
          CON    2RDB,/COMSDFS/RM0014   (DB)  885-42 (PFMD) 
          CON    2RDC,/COMSDFS/RM0115   (DC)  895 
          CON    2RDD,/COMSDFS/RM0110   (DD)  834 
          CON    2RDF,/COMSDFS/RM0120   (DF)  887 (4KB SECTOR)
          CON    2RDG,/COMSDFS/RM0111   (DG)  836 
          CON    2RDH,/COMSDFS/RM0121   (DH)  887 (16KB SECTOR) 
          CON    2RDN,/COMSDFS/RM0124   (DN)  9853 (XMD/CM3)
          CON    2REA,/COMSDFS/RM0130   (EA)  5832 (1X SSD) 
          CON    2REB,/COMSDFS/RM0131   (EB)  5832 (2X SSD) 
          CON    2REC,/COMSDFS/RM0132   (EC)  5833 (1X SABRE) 
          CON    2RED,/COMSDFS/RM0133   (ED)  5833 (1XP SABRE)
          CON    2REE,/COMSDFS/RM0134   (EE)  5833 (2X SABRE) 
          CON    2REF,/COMSDFS/RM0137   (EF)  5833 (2XP SABRE)
          CON    2REG,/COMSDFS/RM0142   (EG)  5838 (1X ELITE) 
          CON    2REH,/COMSDFS/RM0143   (EH)  5838 (1XP ELITE)
          CON    2REI,/COMSDFS/RM0144   (EI)  5838 (2X ELITE) 
          CON    2REJ,/COMSDFS/RM0147   (EJ)  5838 (2XP ELITE)
          CON    2REK,/COMSDFS/RM0145   (EK)  5838 (3XP ELITE)
          CON    2REL,/COMSDFS/RM0146   (EL)  5838 (4X ELITE) 
          CON    2REM,/COMSDFS/RM0135   (EM)  5833 (3XP SABRE)
          CON    2REN,/COMSDFS/RM0136   (EN)  5833 (4X SABRE) 
          CON    2REO,/COMSDFS/RM0162   (EO) 47444 (1X 3.5IN) 
          CON    2REP,/COMSDFS/RM0163   (EP) 47444 (1XP 3.5IN)
          CON    2RES,/COMSDFS/RM0164   (ES) 47444 (2X 3.5IN) 
          CON    2REU,/COMSDFS/RM0167   (EU) 47444 (2XP 3.5IN)
          CON    2REV,/COMSDFS/RM0165   (EV) 47444 (3XP 3.5IN)
          CON    2REW,/COMSDFS/RM0166   (EW) 47444 (4X 3.5IN) 
          CON    0           END OF TABLE 
 MSEID    SPACE  4,10 
*         MSEID - TABLE OF MESSAGE ID-S FOR EXTENDED MEMORY DEVICES.
  
  
 MSEID    BSS    0
          CON    102,/COMSDFS/RM0070    (DP)  ECS I  - DC135 DDP
          CON    100,/COMSDFS/RM0071    (DE)  ECS I  - COUPLER
          CON    202,/COMSDFS/RM0072    (DP)  ECS II - DC135 DDP
          CON    200,/COMSDFS/RM0073    (DE)  ECS II - COUPLER
          CON    101,/COMSDFS/RM0074    (DP)  ECS I  - DC145 DDP
          CON    201,/COMSDFS/RM0075    (DP)  ECS II - DC145 DDP
          CON    300,/COMSDFS/RM0076    (DP)  LCME   - COUPLER
          CON    400,/COMSDFS/RM0077    (DE)  UEM 
          CON    500,/COMSDFS/RM0207    (DE)  ESM    - COUPLER
          CON    501,/COMSDFS/RM0210    (DP)  ESM    - LOW SPEED PORT 
          CON    601,/COMSDFS/RM0172    (DP)  STORNET 
          CON    0           END OF TABLE 
          SPACE  4,10 
          ERRNG  10000-*     *7EL* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    ELG-1       (T0) = ENTRY ADDRESS - 1 
          CON    MSGID-2     (T1) = BASE ADDRESS OF MESSAGE ID TABLE
*                            (T2) = READ BUFFER ADDRESS 
          ERRNZ  LN-*        INCORRECT *7EL* OVERLAY LENGTH 
          QUAL   *
 7EM      MSOVL  7566,T1,DDMD+4,(ERROR MESSAGE GENERATOR.)
          SPACE  4
***       7EM - ERROR MESSAGE GENERATOR.
*         C. R. LUND.        81/07/16.
          SPACE  4
***              *7EM* IS CALLED BY *7EL* BOTH TO CONTINUE BUILDING 
*         THE BML MESSAGE HEADER AND TO COLLECT DATA USED TO DECIDE 
*         WHERE TO RESUME PROCESSING.  THE DATA IS STORED IN *DEST* 
*         FOR LATER USE BY *7EP*.  *7EM* THEN CALLS *7EN* TO CONTINUE 
*         THE MESSAGE BUILDING PROCESS. 
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 CN       EQU    CM+3        CM WORD BUFFER 
****
          SPACE  4
**        EMG - ERROR MESSAGE GENERATOR.
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = READ BUFFER ADDRESS.
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (WB+3 - WB+4) = ADDRESS OF BEGINNING OF TRT. 
*                (DEEC) = ERROR CODE. 
*                (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
*                (ERXA) = EXIT ADDRESS. 
*                (UERR) = ERROR PROCESSING OPTIONS. 
*                (MSFW) = INITIAL CHANNEL IF *6DI* OR *6DP*.
*                (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = PARTIAL BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB) = ORIGINAL (T3 - T7). 
*                (MB+1) = ORIGINAL (WB - WB+4). 
*                (MB+2 - MB+5) = DRIVER DEPENDENT PART OF BML MESSAGE 
*                                (FOR FORMAT, SEE INDIVIDUAL DRIVERS).
* 
*         EXIT   TO *7EN*.
*                (T7) = JOB TERMINATION MODE. 
*                (WB) = ERROR CODE. 
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                         BITS AFFECTED BY THIS OVERLAY - 
*                         BIT 11 = 1 IF IMMEDIATE RETURN ON ERROR 
*                         WAS SELECTED BY CALLER. 
*                (DEWR) = 1 IF *PARE* ERROR CODE ON READ REQUEST AND
*                         LINKAGE BYTES ARE CORRECT.
*                (ERXA) = EXIT ADDRESS (FROM *RDS*/*WDS* ENTRY).
*                (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = PARTIAL BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB - MB+5) = UNCHANGED. 
* 
*         USES   T1, T3, CM - CM+4, CN - CN+4.
* 
*         MACROS MSERR. 
  
  
 EMG      ENTRY              *7EM* ENTRY
  
*         IN THE SPECIAL CASE OF A PARITY ERROR OCCURRING DURING A READ 
*         OPERATION, *7EM* VERIFIES THAT THE LINKAGE BYTES WHICH WERE 
*         RECEIVED WITH THE SECTOR ARE VALID.  IF THE LINKAGE BYTES ARE 
*         BAD (OR IT WAS SOME OTHER KIND OF ERROR), A FLAG IS SET WHICH 
*         IS PASSED BACK TO INFORM THE CALLER IN *RDCT*.
  
          LDM    DEEC 
          STD    T3 
          LMN    PARE 
          ADM    DERW 
          NJN    EMG5        IF WRITE OR NOT *PARE* ERROR CODE
          LDI    T2          COPY FIRST LINKAGE BYTE TO SCRATCH 
          STD    CM 
          NJN    EMG6        IF NOT EOF/EOI 
          LDM    1,T2 
          STD    CM 
          NJN    EMG7        IF NOT EOI 
  
*         VALIDATE EOI IN TRT.
  
          LDD    T7          SET FOR EOI SECTOR VALIDATION
          STD    CM 
  
*         VALIDATE NEXT TRACK LINKAGE IN TRT. 
  
 EMG4     LDD    T6          GET TRT WORD FOR LINKAGE VALIDATION
          SHN    7
          SHN    -11
          STD    T0 
          LDD    WB+3 
          LPN    77 
          SHN    14 
          LMD    WB+4 
          ADD    T0 
          CRD    CN 
          LDD    T6          GET NEXT TRACK POINTER 
          LPN    3
          ADN    CN 
          STD    T0 
          LDD    CM 
          LMI    T0 
          ZJN    EMG8        IF EOI OR NEXT TRACK LINK GOOD 
 EMG5     UJN    EMG9        CONTINUE 
  
 EMG6     LDD    HN 
          SBM    1,T2 
          MJN    EMG9        IF SECTOR WORD COUNT .GT. 100
 EMG7     LDD    T7 
          ADN    1
          LMM    SLM
          ZJN    EMG4        IF SECTOR LIMIT
          LMM    SLM
          LMD    CM 
          NJN    EMG9        IF LINKAGE BYTE BAD
 EMG8     LDN    1           SET *DATA READ/WRITTEN* FLAG 
          STM    DEWR 
  
*         PREVENT *7EQ* FROM BEING RECALLED UPON ERROR RECOVERY IF THIS 
*         IS A READ OPERATION AND THE READ BUFFER EXTENDS BEYOND
*         *EPFW*-1 IN PP MEMORY.  *7EQ* CANNOT BE RECALLED TO ISSUE BML 
*         MESSAGES BECAUSE THE RECOVERED SECTOR HAS WRITTEN OVER PART 
*         OF THE BML MESSAGE, AND *7EQ* MIGHT OVERLAY PART OF THE 
*         SECTOR. 
  
 EMG9     LDM    ERXA 
          NJN    EMG13       IF EXIT ADDRESS SET UP ON PREVIOUS PASS
          LDD    T2 
          SBK    EPFW-502+1 
          MJN    EMG10       IF BUFFER NOT DESTROYED BY ERROR PROCESSOR 
          LDI    T1          FORCE ERROR UNRECOVERED
          LPC    -2000
          LMC    2000 
          STI    T1 
 EMG10    LDM    DERW 
          ERRNZ  REDP        CODE ASSUMES VALUE 
          ERRNZ  WRIP-1      CODE ASSUMES VALUE 
          NJN    EMG12       IF WRITE 
          LCN    1
 EMG12    ADC    RDS+1
          ERRNZ  RDS+2-WDS   CODE DEPENDS ON LOCATION OF ROUTINES 
          STD    CM 
          LDI    CM 
          STM    ERXA 
          LDC    LEP
          STI    CM 
  
*         SET A FLAG FOR *7EP* INDICATING WHETHER OR NOT THE CALLER 
*         REQUESTED IMMEDIATE RETURN ON THIS TYPE OF ERROR.  IF SO, 
*         *7EP* WILL CALL *7ES* TO EXIT TO THE CALLER WITHOUT MAKING
*         ANY RETRIES.
  
 EMG13    LDM    UERR 
          LMM    TEPO,T3
          SBM    UERR 
          PJN    EMG15       IF RETURN NOT SELECTED 
          LDI    T1          CHECK FOR IMMEDIATE RETURN TO DRIVER 
          SHN    21-4 
          MJN    EMG15       IF IMMEDIATE RETURN TO CALLER OVERRIDDEN 
          LDD    TH 
          RAI    T1 
  
*         ADD READ/WRITE FLAG TO BML MESSAGE HEADER.
  
 EMG15    LDM    DERW 
          SHN    1
          RAM    HEDR+6 
  
*         EXTRACT JOB TERMINATION MODE FROM EJT ENTRY.
  
          LDD    CP          FETCH EJT ORDINAL
          ADK    TFSW 
          CRD    T7 
          LDK    EJTP        GET EJT POINTER
          CRD    CM 
          LDD    T7 
          CFI    EJT,,T7
          SHN    6
          ADD    CM 
          SHN    14 
          ADK    SCHE        READ EJT ENTRY 
          ADD    CM+1 
          CRD    CM 
          LDD    CM+2        EXTRACT JOB TERMINATION MODE 
          SHN    0-11 
          LPN    3
          STD    T7 
          LDD    T3          MOVE ERROR CODE
          STD    WB 
          MSERR  7EN         EXECUTE *7EN*
  
  
*         TEPO - ERROR PROCESSING OPTIONS TABLE FOR IMMEDIATE RETURN. 
  
  
          LIST   G
 TEPO     EQU    *-1
          ECHO   1,ERRCODE=("DREC") 
          CON    EPO._ERRCODE      "TXT._ERRCODE" ERROR 
          LIST   *
  
          ERRNG  10000-*     *7EM* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    EMG-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
*                            (T2) = READ BUFFER ADDRESS 
          ERRNZ  LN-*        INCORRECT *7EM* OVERLAY LENGTH 
          QUAL   *
 7EN      MSOVL  7537,T3,DDMD+4,(ERROR MESSAGE GENERATOR.)
          SPACE  4
***       7EN - ERROR MESSAGE GENERATOR.
*         C. R. LUND.        81/07/16.
          SPACE  4
***              *7EN* IS CALLED BY *7EM* BOTH TO COMPLETE THE BML
*         MESSAGE HEADER AND TO COLLECT ADDITIONAL DATA NEEDED TO 
*         DECIDE WHERE TO RESUME PROCESSING.  THE RETRY COUNT IS
*         INCREMENTED AND THEN CHECKED TO SEE IF IT HAS EXCEEDED
*         DEFINED LIMITS. 
 GEM      SPACE  4,10 
**        GEM - ERROR MESSAGE GENERATOR.
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = DERC. 
*                (T3) = DERW. 
*                (T5) = EST ORDINAL.
*                (T6) = LOGICAL TRACK.
*                (T7) = JOB TERMINATION MODE. 
*                (WB) = ERROR CODE. 
*                (DEDT) = ERROR PROCESSING CONTROL WORD.
*                (DENR) = 1 IF NON-RECOVERABLE ERROR, ELSE 0. 
*                (DERC) = RETRY COUNT.
*                (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                (UERR) = ERROR PROCESSING OPTIONS. 
*                (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = PARTIAL BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB) = ORIGINAL (T3 - T7). 
*                (MB+1) = ORIGINAL (WB - WB+4). 
*                (MB+2 - MB+5) = DRIVER DEPENDENT PART OF BML MESSAGE 
*                                (FOR FORMAT, SEE INDIVIDUAL DRIVERS).
* 
*         EXIT   TO *7EO*.
*                (WB) = UNCHANGED.
*                (DENR) = 1 IF NON-RECOVERABLE ERROR CODE SET OR
*                         *UCTM* JOB TERMINATION MODE IS SET. 
*                (DERC) = INCREMENTED RETRY COUNT.
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                         BITS AFFECTED BY THIS OVERLAY - 
*                         BIT 13 = 1 IF MST ERROR COUNTER SHOULD BE 
*                         INCREMENTED FOR THIS ERROR TYPE.
*                         BIT 12 = 1 IF UNRECOVERED (RETRY LIMIT
*                         REACHED). 
*                (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = PARTIAL BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB - MB+5) = UNCHANGED. 
* 
*         USES   T1 - T3, T7, CM - CM+4.
* 
*         MACROS MONITOR, MSERR.
  
  
 GEM      ENTRY              *7EN* ENTRY
  
*         DETERMINE WHETHER OR NOT TO TRY AND REVERSE THE CHANNELS IN 
*         WORD *DALL* OF THE MST FOR THIS DEVICE.  CHANNEL REVERSAL 
*         INCREASES THE LIKELIHOOD THAT THE DRIVER WILL BE GIVEN THE
*         ALTERNATE PATH TO THE DEVICE ON THE NEXT ERROR RETRY.  THIS 
*         MIGHT IMPROVE THE CHANCES FOR ERROR RECOVERY.  CERTAIN TYPES
*         OF ERRORS OCCUR ON THE DATA PATH (E.G. CONTROLLER MEMORY
*         ERRORS AND CHANNEL PARITY ERRORS).  CHANNEL REVERSAL IS NOT 
*         DONE FOR SUCH ERRORS SINCE IT IS IMPORTANT TO IDENTIFY A
*         SOLIDLY FAILING DATA PATH COMPONENT AS SOON AS POSSIBLE TO
*         AVOID PERFORMANCE DEGRADATION.
* 
          LDI    T2 
          SBK    SURT 
          MJP    GEM4        IF TOO EARLY FOR CHANNEL REVERSAL
          NJN    GEM2        IF NOT TIME TO SET SUSPECT FLAG
          LDM    UERR 
          ERRNZ  EPDF-2000   CODE ASSUMES *EPDF* = 2000 
          SHN    21-12
          MJN    GEM2        IF FAILURE EVALUATION DISABLED 
          LDM    GEMB,WB
          SHN    21-7 
          PJN    GEM1        IF SUSPECT NOT TO BE SET FOR THIS ERROR
  
*         SET THE SUSPECT FLAG. 
  
          LDD    T5 
          STD    CM+1 
          LDN    SSES 
          STD    CM+2 
          MONITOR  SEQM 
*         LDD    T5          SET DEVICE ERROR STATUS
*         STD    CM+1 
          LDN    STDE 
          STD    CM+2 
          LDN    SERS 
          STD    CM+3 
          MONITOR  SMDM 
  
*         IF THE ERROR IS  CAUSED BY A MEDIA FAILURE, STORE THE TRACK 
*         NUMBER IN THE MST TO CAUSE A MEDIA VERIFICATION WHEN THE
*         TRACK IS RELEASED.
  
 GEM1     LDD    WB 
          LMK    PARE 
 GEM2     NJN    GEM3        IF NOT MEDIA ERROR 
          LDD    T5 
          STD    CM+1 
          LDD    T6 
          STD    CM+2 
          LDN    SFTS 
          STD    CM+3 
          MONITOR  SMDM 
  
*         REVERSE CHANNELS IN MST ENTRY.
  
 GEM3     LDD    T5 
          STD    CM+1 
          LDN    RVCS        *SCSM* SUBFUNCTION 
          STD    CM+3 
          MONITOR  SCSM 
  
*         DETERMINE WHETHER OR NOT THIS IS A RECOVERABLE ERROR. 
  
 GEM4     LDM    DENR 
          NJN    GEM4.1      IF NON-RECOVERABLE 
          LDD    T7 
          LMK    UCTM 
          ZJN    GEM5        IF UNCONDITIONAL JOB TERMINATION MODE
          LDM    GEMB,WB
          SHN    0-10 
          LPN    3
          ZJN    GEM5        IF NON-RECOVERABLE ERROR 
          LPN    1
 GEM4.1   NJN    GEM6        IF RECOVERABLE ERROR 
          LDI    T3 
          ZJN    GEM6        IF READ
 GEM5     AOM    DENR        SET *NON-RECOVERABLE ERROR* FLAG 
  
*         INCREMENT THE RETRY COUNT AND ADD IT TO THE BML MESSAGE,
*         EXCEPT IN THE CASE WHERE A CONTINUE FUNCTION WILL BE ISSUED 
*         (4400 OR 4600 GENERAL STATUS).  IF THE RETRY COUNT HAS
*         REACHED THE LIMIT DEFINED FOR THE CURRENT ERROR TYPE, A 
*         FLAG IS SET TO INDICATE THAT THE ERROR IS UNRECOVERED.
  
  
 GEM6     LDI    T1 
          SHN    21-4 
          MJN    GEM7        IF RECOVERY IN PROGRESS (4400/4600 STATUS) 
          LDI    T3 
          ZJN    GEM6.1      IF NOT A WRITE OPERATION 
          LDD    WB 
          LMK    NRDE 
          ZJN    GEM7        IF *NOT READY* 
 GEM6.1   AOI    T2          INCREMENT RETRY COUNT
          SBM    GEMA,WB
          MJN    GEM7        IF NOT YET UNRECOVERED 
          LDI    T1          SET UNRECOVERED FLAG 
          LPC    -2000
          LMC    2000 
          STI    T1 
 GEM7     LDI    T2 
          SHN    6
          RAM    HEDR+6 
          LDM    GEMB,WB     SET/CLEAR *ERROR COUNT INCREMENT* FLAG 
          SHN    0-12 
          ZJN    GEM9        IF NO BML MESSAGE/NO ERROR COUNT INCREMENT 
          SHN    0-1
          ZJN    GEM8        IF BML MESSAGE AND ERROR COUNT INCREMENT 
          LDI    T1 
          SHN    21-12
          PJN    GEM9        IF NOT UNRECOVERED 
 GEM8     LDM    DEDT 
          LPN    17 
          LMK    /COMSDFS/D6DE
          NJN    GEM8.1      IF NOT *6DE* CALL
          LDD    WB 
          LMK    ADDE 
          NJN    GEM9        IF NOT ADDRESS ERROR 
 GEM8.1   LDC    4000        SET BML MESSAGE/ERROR COUNT INCREMENT FLAG 
          RAI    T1 
  
*         ADD THE SYMPTOM CODE TO THE BML MESSAGE HEADER. 
  
          LDM    GEMB,WB
          LPC    177
          STM    HEDR+1 
          LMK    /COMSDFS/HS0040
          NJN    GEM9        IF NOT A PARITY ERROR
          LDI    T3          MODIFY CODE IF WRITE PARITY ERROR
          RAM    HEDR+1 
          ERRNZ  /COMSDFS/HS0040+1-/COMSDFS/HS0041
 GEM9     MSERR  7EO         EXECUTE *7EO*
  
*         THE FOLLOWING TABLE LISTS THE RETRY COUNT LIMITS FOR ALL
*         ERROR TYPES.
  
          LIST   G
 GEMA     EQU    *-1
          ECHO   1,ERRCODE=("DREC") 
          CON    RTC._ERRCODE      "TXT._ERRCODE" ERROR 
          LIST   *
          SPACE  4,15 
*         THE FOLLOWING TABLE CONTAINS INFORMATION RELATED TO EACH
*         ERROR TYPE.  ITS FORMAT IS -
*                VFD    2/ERROR COUNT INCREMENT, BML MESSAGE INDICATOR
*                            0    DO NOT INCREMENT MST ERROR COUNT
*                                 AND DO NOT ISSUE BML MESSAGE. 
*                            1    INCREMENT MST ERROR COUNT AND ISSUE 
*                                 BML MESSAGE.
*                            2    INCREMENT MST ERROR COUNT AND ISSUE 
*                                 BML MESSAGE IF UNRECOVERED ERROR. 
*                VFD    2/RECOVERABILITY INDICATOR
*                            0    NON-RECOVERABLE.
*                            1    RECOVERABLE.
*                            2    RECOVERABLE IF READ REQUEST.
*                VFD    1/SUSPECT FLAG
*                            0    DO NOT SET *SUSPECT* FLAG.
*                            1    SET *SUSPECT* FLAG. 
*                VFD    7/SYMPTOM CODE
*                            IF THIS FIELD IS ZERO, NO BML MESSAGE WILL 
*                            BE ISSUED FOR THE ERROR TYPE.
  
          LIST   G
 GEMB     EQU    *-1
          ECHO   1,EC=("DREC")
          VFD    2/IEC._EC,2/REC._EC,1/SUS._EC,7/SYM._EC
          LIST   *
  
  
          ERRNG  10000-*     *7EN* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    GEM-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
          CON    DERC        (T2) = DERC
          CON    DERW        (T3) = DERW
          ERRNZ  LN-*        INCORRECT *7EN* OVERLAY LENGTH 
          QUAL   *
 7EO      MSOVL  7562,T2,DDMD+4,(ERROR MESSAGE GENERATOR.)
          SPACE  4,10 
***       7EO - COMPLETE ERROR MESSAGE. 
*         C. R. LUND.        81/10/08.
          SPACE  4,10 
*                *7EO* IS CALLED BY *7EN* TO ISSUE A GENERIC MASS 
*         STORAGE ERROR MESSAGE TO *MS2W* AND TO FINISH CONSTRUCTING
*         THE BML MESSAGE.  IF THE ERROR OCCURRED ON AN ISD DEVICE, 
*         *7EO* MAY CALL *7KI* TO EXECUTE LEVEL ONE DIAGNOSTICS BEFORE
*         PROCEEDING TO *7EP*.  IN ALL OTHER CASES *7EP* IS CALLED
*         DIRECTLY BY *7EO*.
 CEM      SPACE  4,20 
**        CEM - COMPLETE ERROR MESSAGE. 
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = 2.
*                (T4) = CHANNEL NUMBER. 
*                (T5) = EST ORDINAL.
*                (WB) = ERROR CODE. 
*                (CHRV) = CHANNEL RESERVATION WORD. 
*                         BIT 5 = 1 IF SYSTEM FILE READ.
*                (DEDT) = ERROR PROCESSING CONTROL WORD.
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                (MSD)  = MASS STORAGE DESIGNATOR WORD. 
*                (MSFW) = INITIAL CHANNEL IF *6DI*, *6DJ* OR *6DP*. 
*                (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = PARTIAL BML MESSAGE HEADER. 
*                (DDMD - DDMD+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB) = ORIGINAL (T3 - T7). 
*                (MB+1) = ORIGINAL (WB - WB+4). 
*                (MB+2 - MB+5) = DRIVER DEPENDENT PART OF BML MESSAGE 
*                                (FOR FORMAT, SEE INDIVIDUAL DRIVERS).
* 
*         EXIT   TO *7KI*, IF LEVEL ONE DIAGNOSTICS MUST BE RUN ON AN 
*                          ISD DEVICE.
*                TO *7EP*, OTHERWISE. 
*                (T3 - T7) = RESTORED FROM MESSAGE BUFFER.
*                (WB - WB+4) = RESTORED FROM MESSAGE BUFFER.
*                (MSD) = MASS STORAGE DESIGNATOR WORD.
*                        BITS AFFECTED BY THIS OVERLAY -
*                        BITS 5-0 = 0.
*                (MSGH - MSGH+4) = *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = BML MESSAGE HEADER. 
*                (DDMD - DSFA+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB+3 - MB+5) = UNCHANGED. 
* 
*         USES   T6.
* 
*         MACROS MSERR. 
  
  
 CEM      ENTRY              *7EO* ENTRY
  
*         ADD THE DRIVER TYPE AND INITIAL AND RECOVERY CHANNELS TO THE
*         BML MESSAGE HEADER. 
  
          LDM    DEDT        ADD DRIVER TYPE TO MESSAGE 
          LPN    17 
          STD    T6 
          SHN    10-0 
          RAM    HEDR+1 
          SHN    0-10 
          SBK    /COMSDFS/DRCH
          PJN    CEM1        IF NO CHANNEL IN MESSAGE 
          LDM    MSFW        ADD INITIAL CHANNEL TO MESSAGE 
          RAM    HEDR+2 
          LDD    T4          ADD RECOVERY CHANNEL TO MESSAGE
          SHN    6
          STM    HEDR+7 
  
*         IF ERROR IS UNRECOVERED, SET A FLAG IN THE BML MESSAGE. 
  
 CEM1     LDI    T1 
          SHN    0-12 
          LPN    1
          RAM    HEDR+6 
          LDM    CEMD,T6     SET BML MESSAGE LENGTH 
          STM    MSGH+3 
  
*         POST AN ERROR MESSAGE IN *MS2W* INDICATING THE TYPE OF ERROR
*         AND THE DEVICE ON WHICH THE ERROR OCCURRED. 
  
          LDM    CEMC,WB     PLACE ERROR TYPE IN *MS2W* MESSAGE 
          STM    CEMA+3 
          LDD    T5          PUT EST ORDINAL INTO *MS2W* MESSAGE
          SCN    7
          STD    T0 
          SHN    -3 
          LMD    T0 
          SCN    70 
          RAM    CEMA+1 
          LDD    T5 
          LPN    7
          SHN    6
          RAM    CEMA+2 
  
*         RESTORE ALL SCRATCH CELLS.  READ IN THE FIRST WORD OF THE 
*         DRIVER DEPENDENT PART OF THE BML MESSAGE FROM THE MESSAGE 
*         BUFFER SO THAT IT WILL NOT BE DESTROYED BY A LATER *ENDMS* OR 
*         *UTEM* FUNCTION.
  
          LDD    MA          RESTORE DRIVER PARAMETERS
          CRM    T3,ON
          CRM    WB,ON       RESTORE CELLS (WB - WB+4)
          CRM    DSFA,ON     READ FIRST WORD OF BML MESSAGE TEXT
          ERRPL  DSFA+5-*    DATA OVERLAYS CODE 
          LDM    MSD         FORCE DRIVER LOAD ON NEXT *SETMS*
          SCN    77          PRESERVE OTHER DATA SET BY *LMSM*
          STM    MSD
  
*         CALL THE NEXT OVERLAY.  *7KI* WILL BE CALLED IF THE ERROR 
*         OCCURRED ON AN ISD DEVICE AND *LEVEL 1* DIAGNOSTICS MUST BE 
*         RUN.  *7EP* WILL BE CALLED IN ALL OTHER CASES.
  
          LDI    T1 
          LPC    3040 
          LMC    2040 
          NJN    CEM3        IF NOT UNRECOVERED ISD DRIVE ERROR 
          LDM    UERR 
          ERRNZ  EPND-1000   CODE ASSUMES VALUE 
          SHN    21-11
          MJN    CEM3        IF *NO LEVEL 1 DIAGNOSTICS* SET ON *SETMS* 
          LDM    CHRV 
          LPN    40 
          NJN    CEM3        IF *READSYS* OPERATION 
          SOM    CEMA+4      CHANGE MESSAGE TEXT
          LDD    CP          WRITE *7KI* MESSAGE TO *MS2W*
          ADK    MS2W 
          CWM    CEMA,ON
          CWM    CEMB,T2
          MSERR  7KI         CALL *7KI* 
  
 CEM3     LDD    CP 
          ADK    MS2W 
          CWM    CEMA,TR
          MSERR  7EP         EXECUTE *7EP*
  
  
 CEMA     DATA   C*EQ000 XX ERROR RETRY UNDERWAY.*
 CEMB     DATA   C*IAGNOSTICS RUNNING.* 
  
*         THE FOLLOWING TABLE LISTS THE TWO CHARACTER MNEMONICS 
*         CORRESPONDING TO EACH MASS STORAGE ERROR TYPE.
  
          LIST   G
 CEMC     EQU    *-1
          ECHO   1,ERRCODE=("DREC") 
          CON    EMN._ERRCODE      "TXT._ERRCODE" ERROR 
          CON    0           LAST WORD OF TABLE MUST NOT BE .LT. 7777 
          LIST   *
  
*         THE FOLLOWING TABLE LISTS THE LENGTH OF THE BML 
*         MESSAGE PRODUCED BY EACH DRIVER.
  
 CEMD     INDEX 
          INDEX  /COMSDFS/D6DI,10 
          INDEX  /COMSDFS/D6DJ,10 
          INDEX  /COMSDFS/D6DP,5
          INDEX  /COMSDFS/D6DE,5
          INDEX  /COMSDFS/D6DX,5
          INDEX  /COMSDFS/D6DX+1
  
  
          ERRNG  10000-*     *7EO* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    CEM-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
          CON    2           (T2) = 2 
*                            (T3) = ERROR CODE
          ERRNZ  LN-*        INCORRECT *7EO* OVERLAY LENGTH 
          QUAL   *
 7EP      MSOVL  7620,T2,DSFA+4,(MASS STORAGE ERROR PROCESSOR.) 
          SPACE  4
***       7EP - DISK ERROR PROCESSING.
*         W. E. GOEBEL.      78/04/01.
          SPACE  4
***              *7EP* IS CALLED BY *7EO* TO DETERMINE HOW PROCESSING 
*         OF THIS ERROR SHOULD CONTINUE.
* 
*         AN *ENDMS* WILL BE ISSUED EXCEPT IN THE FOLLOWING CASES - 
* 
*                1) A CONTINUE FUNCTION MUST BE ISSUED.  *7EP* CALLS
*                   *7SI*.
*                2) *7DP* CALLED FOR IMMEDIATE RETURN.  *7EP* CALLS 
*                   *7SP*.
*                3) CONTROLWARE MUST BE RELOADED OR A CHANNEL MUST BE 
*                   DOWNED.  *7EP* CALLS *7II*. 
*                4) THE *DE* ERROR PROCESSING OPTION WAS SPECIFIED ON 
*                   THE *SETMS* CALL. 
* 
*         FOR ALL OTHER CASES AN *ENDMS* WILL BE DONE AND PROCESSING
*         WILL CONTINUE AS FOLLOWS -
* 
*                1) IF THE CALLER SELECTED IMMEDIATE RETURN ON THE
*                   ERROR, *7EP* CALLS *7ES*. 
*                2) IF THE ERROR IS A RESERVE ERROR NOT YET AT RETRY
*                   LIMIT, *7EP* DELAYS AND THEN REENTERS THE DRIVER AT 
*                   TO RETRY THE OPERATION. 
*                3) IF THE OPERATION IS A *READSYS* ON A SYSTEM DEVICE, 
*                   THE OPERATION WILL BE RETRIED INDEFINITELY.  THE
*                   SYSTEM DEVICE SELECTION ALGORITHM IN *MTR* ENSURES
*                   THAT IF A SYSTEM DEVICE FAILS AND AN ALTERNATE ONE
*                   EXISTS, THAT ONE WILL BE SELECTED ON THE NEXT 
*                   RETRY.  TO RETRY THE OPERATION, *7EP* REENTERS THE
*                   DRIVER. 
*                4) IF THE ERROR IS UNRECOVERED, *7EP* CALLS *7EQ* TO 
*                   ISSUE THE BML MESSAGE BUILT BY *7EL* - *7EO*. 
*                5) FOR ALL OTHER CASES IN WHICH THE ERROR IS NOT YET 
*                   UNRECOVERED, *7EP* WILL REENTER THE DRIVER TO RETRY 
*                   THE OPERATION.
 DEP      SPACE  4,25 
**        DEP - DISK ERROR PROCESSING.
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = DEEC. 
*                (T5) = EST ORDINAL.
*                (CHRV) = DRIVER CONTROL WORD.
*                (DEDT) = ERROR PROCESSING CONTROL WORD.
*                (DEEC) = ERROR CODE. 
*                (DENR) = 1 IF NON-RECOVERABLE ERROR. 
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                (DEXA) = EXIT ADDRESS. 
*                (UERR) = ERROR PROCESSING OPTIONS. 
*                (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = BML MESSAGE HEADER. 
*                (DDMD - DSFA+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB+3 - MB+5) = LAST THREE WORDS OF DRIVER DEPENDENT 
*                                PART OF BML MESSAGE.  (FOR FORMAT, SEE 
*                                INDIVIDUAL DRIVERS.) 
* 
*         EXIT   (MSGH - MSGH+4) = PARTIAL *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = BML MESSAGE HEADER. 
*                (DDMD - DSFA+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB+3 - MB+5) = UNCHANGED. 
* 
*         USES   T1, CM - CM+4. 
* 
*         MACROS DELAY, ENDMS, MONITOR, MSERR, PAUSE, SFA.
  
  
 DEP      ENTRY              *7EP* ENTRY
  
          LDI    T2 
          SBK    NRVE 
          PJN    DEP1        IF SPECIAL CHANNEL ACTION NOT NEEDED 
          LDM    DEDT 
          LPN    17 
          LMK    /COMSDFS/D6DI
          ERRNZ  /COMSDFS/D6DI-/COMSDFS/D6DJ  CODE DEPENDS ON VALUE 
          NJN    DEP1        IF NOT *6DI*/*6DJ* CALL
          LDD    T5          ENSURE SUSPECT SET FOR PATH FAILURES 
          STD    CM+1 
          LDK    SSES 
          STD    CM+2 
          MONITOR  SEQM 
          LDI    T1 
          SHN    21-12
          MJN    DEP1        IF UNRECOVERED ERROR 
*         LDD    T5          REVERSE CHANNELS FOR PATH FAILURE
*         STD    CM+1 
          LDK    RVCS 
          STD    CM+3 
          MONITOR  SCSM 
          MSERR  7II         EXECUTE *7II*
  
 DEP1     LDI    T1 
          SHN    21-4 
          PJN    DEP4        IF NOT IMMEDIATE RETURN TO DRIVER
 DEP2     LDM    DEXA 
          STD    CM 
          LJM    0,CM        RETURN TO DRIVER 
  
 DEP2.1   LDD    TH          SET IMMEDIATE RETURN TO CALLER 
          RAM    DEST 
 DEP3     MSERR  7ES         EXECUTE *7ES*
  
 DEP4     LDM    UERR 
          ERRNZ  EPDE-400-EPSM  CODE ASSUMES VALUE
          SHN    21-10
          MJN    DEP5        IF *ENDMS* DISABLED
          ENDMS 
 DEP5     LDI    T1 
          SHN    21-11
          MJN    DEP3        IF RETURN TO CALLER SELECTED 
          SHN    11-12+22 
          MJN    DEP9        IF UNRECOVERED 
          LDI    T2 
          SBK    RESE 
          MJN    DEP2        IF NOT A RESERVE ERROR 
 DEP5.1   LDC    250D        ALLOW OPERATOR TO SEE B-DISPLAY MESSAGE
          STD    T1 
 DEP6     PAUSE 
          LDD    CM+1 
          LMN    ORET 
          ZJP    DEP2.1      IF OPERATOR OVERRIDE 
          DELAY  8D 
          SOD    T1 
 DEP7     NJN    DEP6        IF NOT END OF DELAY
          LDD    CP          CLEAR MESSAGE
          ADN    MS2W 
          CWD    T1 
 DEP8     LJM    DEP2        REENTER DRIVER AT RETRY ADDRESS
  
 DEP9     SFA    EST,T5 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          SHN    21-12
          PJN    DEP10       IF NOT SYSTEM DEVICE 
          LDM    CHRV 
          SHN    21-5 
          PJN    DEP10       IF NOT *READSYS* OPERATION 
 DEP9.1   LDC    -2000       CLEAR UNRECOVERED FLAG IN *DEST* 
          RAI    T1 
          SOM    HEDR+6      CLEAR UNRECOVERED FLAG IN BML MESSAGE
          SOM    DERC        ENSURE RETRY COUNT DOESN-T WRAP
          UJP    DEP5.1      CHECK FOR OVERRIDE / RETRY 
  
 DEP10    LDI    T2 
          SBN    IRTE 
          PJN    DEP9.1      IF INDEFINITE RETRY CONDITION
          MSERR  7EQ         EXECUTE *7EQ*
  
  
          ERRNG  10000-*     *7EP* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    DEP-1       ENTRY ADDRESS - 1
          CON    DEST        (T1) = DEST
          CON    DEEC        (T2) = DEEC
          ERRNZ  LN-*        INCORRECT *7EP* OVERLAY LENGTH 
          QUAL   *
 7EQ      MSOVL  7543,T2,DSFA+4,(MASS STORAGE ERROR PROCESSOR.) 
 7EQ      SPACE  4,10 
***       7EQ - MASS STORAGE ERROR PROCESSOR. 
*         K. F. REHM.        84/02/01.
 7EQ      SPACE  4,10 
***              *7EQ* IS CALLED BY *7EP* FOR UNRECOVERED ERRORS AND
*         VIA THE *RDS*/*WDS* EXIT ADDRESS FOR RECOVERED ERRORS.  IT
*         COPIES THE BML MESSAGE BUILT BY *7EL* - *7EO* INTO THE
*         *EMB* AND THEN REQUESTS *1MD* TO ISSUE THE MESSAGE. 
*         *7EQ* EXITS TO *7ES*. 
 7EQ      SPACE  4,25 
**        DEQ - ISSUE DRIVER BML MESSAGES.
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = MSGH+3. 
*                (DEDT) = ERROR PROCESSING CONTROL WORD.
*                (DEGS) = GENERAL STATUS TAKEN BY *7CI* IF
*                         *6DI*/*6DJ* CALL. 
*                (DELF) = LAST FUNCTION ISSUED BEFORE TIMEOUT.
*                (DENR) = 1 IF NON-RECOVERABLE ERROR. 
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                (UERR) = ERROR PROCESSING OPTIONS. 
*                (MSGH - MSGH+4) = *EMB* MESSAGE HEADER.
*                (HEDR - HEDR+11) = BML MESSAGE HEADER. 
*                (DDMD - DSFA+4) = DEVICE DEPENDENT MESSAGE DATA. 
*                (MB+3 - MB+5) = LAST THREE WORDS OF DRIVER DEPENDENT 
*                                PART OF BML MESSAGE (FOR FORMAT, SEE 
*                                INDIVIDUAL DRIVERS). 
* 
*         EXIT   TO *7ES*.
* 
*         USES   CM - CM+4, T3 - T7, WB - WB+4. 
* 
*         MACROS DELAY, ENDMS, EXECUTE, MONITOR, MSERR. 
  
 DEQ      ENTRY              *7EQ* ENTRY
  
          LDI    T1 
          SHN    0-11 
          LPN    5
          LMN    4
          NJP    DEQ6        IF NO BML MESSAGE SHOULD BE ISSUED 
          LDM    DEDT 
          LPN    20 
          NJN    DEQ1        IF RETURN TO ERROR PROCESSOR 
  
*         READ THE REMAINDER OF THE BML MESSAGE IN FROM THE MESSAGE 
*         BUFFER AND THEN COPY THE MESSAGE TO THE *EMB*.  CALL
*         *1MD* TO ISSUE THE MESSAGE. 
  
          LDM    UERR 
          ERRNZ  EPDE-400-EPSM  CODE ASSUMES VALUE
          SHN    21-10
          MJN    DEQ1        IF *ENDMS* DISABLED
          ENDMS 
 DEQ1     LDD    MA          GET REMAINDER OF DRIVER DEPENDENT DATA 
          ADN    3
          CRM    DSFA+5,TR
          ERRPL  DSFA+24-*   DATA OVERLAYS CODE 
          SBN    1
          CWD    WB          SAVE CELLS (WB - WB+4) 
          SBN    1
          CWD    T3          SAVE CELLS (T3 - T7) 
  
*         THE FOLLOWING CODE EMULATES THE ERROR MESSAGE BUFFER
*         HANDLING FOUND AND DOCUMENTED IN COMMON DECK *COMPIMB*. 
  
          LDD    TH          SET MAXIMUM RETRY COUNT
          STD    T3 
          LDN    EMBP 
          CRD    T5          FETCH *EMB* POINTER
  
*         TRY TO OBTAIN THE *EMB* INTERLOCK.
  
 DEQ2     LDN    ZERL 
          CRD    CM          PRESET *UTEM* REQUEST
          LDD    T7 
          STD    CM+4        SET ADDRESS OF INTERLOCK WORD
          LDD    T6 
          STD    CM+3 
          MONITOR  UTEM      GET *EMB* INTERLOCK
          LDD    CM+1 
          ZJN    DEQ3        IF INTERLOCK OBTAINED
 DEQ2.1   DELAY  10          DELAY 1 MILLISECOND
          UJN    DEQ2        RETRY INTERLOCK ATTEMPT
  
*         *EMB* INTERLOCKED - GET *EMB* HEADER WORDS. 
  
 DEQ3     LDD    T6          GET *EMB* HEADER 1 (FLAGS, *IN*) 
          SHN    14 
          LMD    T7 
          CRD    WB 
          ADN    1           GET *EMB* HEADER 2 (*OUT*, *LIMIT*)
          CRD    CM 
  
*         SEE IF MESSAGE WILL FIT IN THE BUFFER.
  
          LDI    T2          EXTRACT MESSAGE LENGTH 
          STD    CM 
 DEQ3.1   LDD    WB+3        *IN* 
          SBD    CM+3        *OUT*
          PJN    DEQ3.4      IF *IN* .GE. *OUT* 
          ADD    CM          MESSAGE LENGTH 
          MJN    DEQ3.5      IF MESSAGE FITS BETWEEN *IN* AND *OUT* 
 DEQ3.2   RJM    IMD         CALL *1MD* 
          ZJN    DEQ3.3      IF UNABLE TO CALL *1MD*
          LDD    WB+1 
          NJN    DEQ3.3      IF *MESSAGES LOST* FLAG IS ALREADY SET 
          SOD    T3 
          ZJN    DEQ3.3      IF MAXIMUM RETRY COUNT EXCEEDED
          SOD    WB+4        CLEAR *EMB* INTERLOCK BIT
          LDD    T6          RELEASE *EMB* INTERLOCK
          SHN    14 
          LMD    T7 
          CWD    WB 
          UJN    DEQ2.1      RETRY
  
*         MAXIMUM RETRY COUNT EXCEEDED - SET *MESSAGES LOST* AND EXIT.
  
 DEQ3.3   AOD    WB+1        SET *MESSAGES LOST* FLAG 
          LJM    DEQ5        CLEAR INTERLOCK AND EXIT 
  
*         SEE IF MESSAGE WILL FIT BETWEEN *IN* AND *LIMIT*. 
  
 DEQ3.4   LDD    CM          MESSAGE LENGTH 
          ADD    WB+3        *IN* 
          SBD    CM+4        *LIMIT*
 DEQ3.5   MJN    DEQ4        IF MESSAGE FITS BETWEEN *IN* AND *LIMIT* 
          LDD    CM+3 
          ZJN    DEQ3.2      IF *OUT* .EQ. *FIRST* - DO NOT RESET *IN*
          LDD    T6          SET TERMINATOR IN *EMB*
          SHN    14 
          ADD    T7 
          ADN    2
          ADD    WB+3 
          CWM    IMDA,ON
          LDN    0           RESET *IN* 
          STD    WB+3 
          LDD    T6          UPDATE HEADER
          SHN    14 
          LMD    T7 
          CWD    WB 
          LJM    DEQ3.1      RECHECK MESSAGE FIT
  
*         MESSAGE WILL FIT - PUT IT IN THE *EMB*. 
  
 DEQ4     LDD    T6          WRITE ERROR MESSAGE TO *EMB* 
          SHN    14 
          ADD    T7 
          ADN    2           ADVANCE OVER *EMB* HEADER
          ADD    WB+3 
          CWM    MSGH,CM
          LDD    CM          UPDATE LENGTH OF DATA IN *EMB* 
          RAD    WB+3 
          RJM    IMD         CALL *1MD* 
 DEQ5     SOD    WB+4        CLEAR INTERLOCK AND UPDATE HEADER
          LDD    T6 
          SHN    14          UPDATE *EMB* INFORMATION 
          LMD    T7 
          CWD    WB 
          LDD    MA          RESTORE CELLS (T3 - T7)
          ADN    4
          CRD    T3 
          ADN    1           RESTORE CELLS (WB - WB+4)
          CRD    WB 
 DEQ6     MSERR  7ES         EXECUTE *7ES*
 IMD      SPACE  4,15 
**        IMD - INITIATE *1MD*. 
* 
*         ENTRY  (WB - WB+4) = *EMB* HEADER WORD. 
* 
*         EXIT   (A) .EQ. 0 IF UNABLE TO CALL *1MD*.
*                    .NE. 0 IF *1MD* HAS BEEN CALLED. 
*                *1MD CALLED* FLAG IS SET IN *WB+4* IF *1MD* CALLED.
* 
*         USES   WB+4, CM - CM+4. 
* 
*         CALLS  1MD. 
* 
*         MACROS EXECUTE, MONITOR.
  
  
 IMD      SUBR               ENTRY/EXIT 
          LDD    WB+4 
          LPN    2
          NJN    IMDX        IF *1MD* ALREADY CALLED
          LDD    MA 
          CWM    IMDA,ON
          LDK    ZERL 
          CRD    CM 
          LDN    10          FORCE SYSTEM CONTROL POINT 
          STD    CM+1 
          EXECUTE  1MD,=
          MONITOR  RPPM 
          LDD    CM+1 
          ZJN    IMDX        IF *RPPM* UNSUCCESSFUL 
          LDN    2           SET *1MD CALLED* FLAG
          RAD    WB+4 
          UJN    IMDX        RETURN 
  
  
 IMDA     VFD    18/3L1MD,42/1  *1MD* CALL/BUFFER TERMINATOR
  
          ERRNG  10000-*     *7EQ* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    DEQ-1       ENTRY ADDRESS - 1
          CON    DEST        (T1) = DEST
          CON    MSGH+3      (T2) = MSGH+3
          ERRNZ  LN-*        INCORRECT *7EQ* OVERLAY LENGTH 
          QUAL   *
 7ER      MSOVL  7662,T1,DEXA,(MASS STORAGE ERROR PROCESSOR.) 
 7ER      SPACE  4,10 
***       7ER - MASS STORAGE ERROR PROCESSOR. 
*         K. F. REHM.        84/02/01.
 7ER      SPACE  4,10 
***              *7ER* IS CALLED BY *7DP* FOR UNRECOVERED 
*         AND RECOVERABLE ERRORS TO ISSUE A GENERIC ERROR MESSAGE TO
*         THE JOB AND SYSTEM DAYFILES.  *7ER* ALWAYS CALLS *7ES*. 
 7ER      SPACE  4,25 
**        DER - ISSUE ERRLOG AND DAYFILE MESSAGES.
* 
*         ENTRY  (T1) = DEEC. 
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (DEEC) = ERROR CODE. 
*                (UERR) = ERROR PROCESSING OPTIONS. 
* 
*         EXIT   TO *7ES*.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  IDM. 
* 
*         MACROS MSERR. 
  
  
 DER      ENTRY              *7ER* ENTRY
  
          LDI    T1          PUT ERROR TYPE INTO DAYFILE MESSAGE
          STD    CM+1 
          LDM    DERB,CM+1
          STM    DERA+3 
  
*         THE EST ORDINAL MUST BE OBTAINED FROM THE BML MESSAGE SO THAT 
*         SYSTEM DEVICE ERRORS ARE REPORTED CORRECTLY.  TO RECOVER FROM 
*         AN ERROR DURING A *READSYS* OPERATION ON A SYSTEM DEVICE IT 
*         MAY BE NECESSARY FOR *MTR* TO SELECT A DIFFERENT DEVICE FROM
*         THE ONE ON WHICH THE ERROR OCCURRED.
  
          LDD    T5 
          SCN    7
          STD    T0 
          SHN    -3 
          LMD    T0 
          SCN    70 
          RAM    DERA+1 
          LDD    T5 
          LPN    7
          SHN    6
          RAM    DERA+2 
  
*         ISSUE AN UNRECOVERED ERROR MESSAGE TO THE ERRLOG AND TO THE 
*         SYSTEM AND JOB DAYFILES INDICATING THE TYPE OF ERROR AND THE
*         DEVICE ON WHICH THE ERROR OCCURRED. 
  
          RJM    IDM         ISSUE ERRLOG MESSAGE 
          LCN    ERLN/10000 
          RAM    IDMA 
          RJM    IDM         ISSUE JOB AND SYSTEM DAYFILE MESSAGES
          MSERR  7ES         EXECUTE *7ES*
 IDM      SPACE  4,10 
**        IDM - ISSUE DAYFILE AND ERRLOG MESSAGES.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  DFM. 
  
  
 IDM      SUBR               ENTRY/EXIT 
          LDM    UERR 
          LPN    EPSM 
          ERRNZ  EPSM-20     CODE ASSUMES VALUE 
          SHN    21-4 
 IDMA     ADC    DERA+ERLN
*         ADC    DERA        (SYSTEM AND JOB DAYFILE MESSAGES)
          RJM    DFM
          UJN    IDMX        RETURN 
  
*         THE FOLLOWING CODE MAY BE OVERLAYED BY THE DAYFILE DUMP 
*         BOOTSTRAP LOADER.  THE REST OF *7ER* MUST BE SAVED AND
*         RESTORED BY *1DD*.
  
          ERRNG  10003-3*5-*  BOOTSTRAP LOADER OVERLAYS *7ER* CODE
  
 DERA     DATA   C*EQ000 XX MASS STORAGE ERROR.*
  
          LIST   G
 DERB     EQU    *-1
          ECHO   1,ERRCODE=("DREC") 
          CON    EMN._ERRCODE      "TXT._ERRCODE" ERROR 
          LIST   *
  
          ERRNG  10000-*     *7ER* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    DER-1       ENTRY ADDRESS - 1
          CON    DEEC        (T1) = DEEC
          ERRNZ  LN-*        INCORRECT *7ER* OVERLAY LENGTH 
          QUAL   *
 7ES      MSOVL  7656,T2,DEXA,(MASS STORAGE ERROR PROCESSOR.) 
 7ES      SPACE  4,10 
***       7ES - MASS STORAGE ERROR PROCESSOR. 
*         K. F. REHM.        84/02/01.
 7ES      SPACE  4,10 
***              *7ES* IS CALLED BY *7EP*, *7EQ*, *7ER* AND *7DP* TO
*         INCREMENT THE RECOVERED OR UNRECOVERED ERROR COUNTIN THE MST
*         FOR THE CURRENT DEVICE.  *7ES* EXITS TO THE CALLER WITH 
*         THE ACCUMULATOR SET TO INDICATE WHETHER OR NOT THE ERROR
*         WAS RECOVERED.
 7ES      SPACE  4,25 
**        DES - INCREMENT ERROR COUNTS. 
* 
*         ENTRY  (T1) = DEST. 
*                (T2) = 0.
*                (T4 - T7) = DRIVER PARAMETERS. 
*                (DEDT) = ERROR PROCESSING CONTROL WORD.
*                (DEEC) = ERROR CODE. 
*                (DENR) = 1 IF NON-RECOVERABLE ERROR. 
*                (DERW) = 1 IF WRITE REQUEST, 0 IF READ REQUEST.
*                (DEST) = ERROR PROCESSING CONTROL WORD.
*                (DEWR) = IF DATA READ OR WRITTEN.
*                (ERXA) = EXIT ADDRESS. 
* 
*         EXIT   (A) = 0 IF RECOVERED.
*                    = 1/1, 5/0, 12/RDCT   IF NOT RECOVERED.
*                (RDCT) = 1/F, 1/N, 4/0, 6/E. 
*                         F = 1 IF READ REQUEST AND THE LINKAGE BYTES 
*                             ARE CORRECT.
*                           = 1 IF WRITE REQUEST AND DATA WAS WRITTEN 
*                             BEFORE ERROR WAS DETECTED OR DURING ERROR 
*                             RECOVERY ATTEMPT. 
*                         N = 1 IF NON-RECOVERABLE ERROR. 
*                         E = ERROR CODE. 
*                (ERXA) = 0.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
*         AVOID INCREMENTING THE RECOVERED OR UNRECOVERED ERROR COUNT 
*         IN THE MST IF ONE OF THE FOLLOWING CONDITIONS HOLDS - 
* 
*         1.  IMMEDIATE RETURN TO CALLER IS SELECTED. 
*         2.  CELL *DEST* INDICATES THAT THE MST COUNTER SHOULD NOT BE
*             INCREMENTED FOR THIS ERROR TYPE.
*         3.  CELL *DEDT* INDICATED RETURN TO ERROR PROCESSOR.
  
 DES3     LDI    T1          CHECK *DEST* 
          SHN    21-13
          PJN    DES5        IF COUNTER NOT TO BE UPDATED 
          SHN    13-11
          MJN    DES5        IF IMMEDIATE RETURN TO CALLER SELECTED 
          LPN    1
          ADN    3           SET BYTE NUMBER
          STD    CM+2 
          LDD    T5          SET EST ORDINAL
          STD    CM+1 
          LDK    ICTS        SET SUBFUNCTION
          STD    CM+3 
          MONITOR  SMDM      INCREMENT ERROR COUNTER
  
*         IF ERROR WAS RECOVERED, CLEAR *RDCT* AND RETURN TO THE CALLER 
*         WITH ZERO IN THE ACCUMULATOR.  IF THE ERROR WAS UNRECOVERED 
*         OR *RETURN TO CALLER* WAS SELECTED, SET UP CELL *RDCT* AND
*         RETURN TO THE CALLER WITH (A) = (RDCT) + 400000.
  
 DES5     LDM    UERR        CHECK ERROR PROCESSING OPTIONS 
          LPN    EPNS 
          NJN    DES6        IF *EPNS* ORIGINALLY REQUESTED 
          LDM    CHRV 
          SCN    EPNS        CLEAR ACCESS TO SUSPECT DEVICE 
          STM    CHRV 
 DES6     LDI    T1 
          LPC    3000 
          ZJN    DES8        IF NOT UNRECOVERED / IMMEDIATE RETURN
          LDI    T1          SET UP *RDCT*
          LPC    400
          LMM    RDCT 
          LPC    1400 
          SHN    21-11
          LMM    DENR 
          SHN    21-0 
          LMM    DEWR 
          LMN    1
          SHN    13-0 
          LMC    1S17D
          LMM    DEEC 
 DES8     STM    RDCT 
 DES9     LJM    *           RETURN 
 DESA     EQU    *-1
  
 DES      ENTRY              *7ES* ENTRY
          LDM    ERXA 
          NJN    DES1        IF EXIT ADDRESS PRESENT
          LDM    DERW 
          SHN    1
          ADC    RDS
          ERRNZ  RDS+2-WDS   CODE DEPENDS ON VALUE
          STD    CM 
          LDI    CM          SET RETURN FROM DRIVER 
 DES1     STM    DESA 
          LDN    0
          STM    ERXA 
          LDD    CP          CLEAR *MS2W* MESSAGE 
          ADN    MS2W 
          CWD    T2 
          LDM    DEDT        CHECK IMMEDIATE RETURN 
          LPN    20 
          NJN    DES9        IF RETURN TO ERROR PROCESSOR 
          LJM    DES3        EVALUATE *RDCT*
          SPACE  4,10 
          ERRNG  10000-*     *7ES* HAS OVERFLOWED 
          BSS    10000-*     (SPARES) 
          CON    DES-1       (T0) = ENTRY ADDRESS - 1 
          CON    DEST        (T1) = DEST
          CON    0           (T2) = 0 
          ERRNZ  LN-*        INCORRECT *7ES* OVERLAY LENGTH 
          QUAL   *
          TTL    PPR/"PBK0" - PP BREAKPOINT PACKAGE BOOTSTRAP.
          TITLE 
          QUAL   "PBK0" 
          IDENT  "PBK0",ZBK 
*COMMENT  PPR - PP BREAKPOINT PACKAGE BOOTSTRAP.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       0BK - PP BREAKPOINT PACKAGE BOOTSTRAP.
*         S. L. MC BRIDE.    77/02/17.
          SPACE  4,10 
***              *0BK* IS A BOOTSTRAP LOADER FOR *7BK*.  THIS VERY
*         SMALL PROGRAM LOADS IN PLACE OF THE BREAKPOINTED PROGRAM. 
*         *0BK* LOADS *7BK* VIA *PLL* WITHOUT DESTROYING (LA).
*         *0BK* IS NOT A TRUE RELOCATION FREE OVERLAY, SINCE *CPUMTR* 
*         ALWAYS CAUSES THE LOAD ADDRESS OF *0BK* TO BE THE SAME AS 
*         THAT OF THE PROGRAM BEING BREAKPOINTED (WHICH MAY OR MAY
*         NOT BE ZERO). 
          SPACE  4,10 
          ORG    5
 ZBK      UJN    ZBK1        ENTRY FROM *PLL* 
          CON    0
  
 ZBK1     LDC    PLDP        FETCH PLD POINTER
          CRD    CM 
          LDD    CM          FIND *7BK* LOAD INFORMATION
          SHN    14 
          ADD    CM+1 
          SBN    4
          CRD    CM 
          LDD    CM+1        SET CM RESIDENT STATUS 
          LPN    37 
          LMD    HN 
          STD    CM+1 
          LDD    CM+4        *7BK* LOAD ADDRESS 
          LJM    PLL4        LOAD *7BK* 
          QUAL   *
          TTL    PPR/"PBK7" - PP BREAKPOINT PACKAGE.
          TITLE 
          QUAL   "PBK7" 
          IDENT  "PBK7",O"PBK7" 
*COMMENT  PPR - PP BREAKPOINT PACKAGE.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       7BK - PP BREAKPOINT PACKAGE.
* 
*         BOB BEDOLL.        74/07/22.
*         S. L. MC BRIDE.    77/01/14.
          SPACE  4,10 
***              *7BK* IS A BREAKPOINT OVERLAY USED FOR PP PROGRAM
*         DEBUGGING.  IT RESIDES IN THE MASS-STORAGE ERROR PROCESSOR
*         AREA, AND COMMUNICATES WITH THE OPERATOR THROUGH THE LAST 
*         TWO WORDS OF THE PP MESSAGE BUFFER. 
* 
*         WHEN A USER ENTERS THE *DSD* COMMAND -
* 
*                BKP,XXX. 
* 
*         *DSD* ISSUES A *SJCM* MONITOR FUNCTION TO SET A BREAKPOINT. 
*         WHEN PP RESIDENT LOADS XXX, IT WILL FIRST LOAD *0BK*
*         DISGUISED AS XXX.  *0BK* LOADS *7BK*.  *7BK* SETS THE *PLL* 
*         RETURN, READS UP THE CORRECT PP LOAD ADDRESS FROM PLD-1 AND 
*         REENTERS *PLL* TO LOAD THE PROGRAM.  ONCE *PLL* HAS LOADED
*         XXX, IT WILL RETURN CONTROL TO *7BK*.  THIS BOOTSTRAP 
*         PROCESS LOADS BOTH XXX AND *7BK*, LEAVING *7BK* IN CONTROL
*         BEFORE EXECUTION OF XXX BEGINS. 
* 
*         *BKP* COMMUNICATES WITH *DSD* VIA WORDS 6 AND 7 OF THE PP 
*         COMMUNICATIONS AREA (WORDS 4 AND 5 OF PP-S MESSAGE BUFFER). 
* 
*         AFTER A BREAKPOINT, *7BK* SETS UP MB+5. 
* 
*T, MB+5  12/ 7777,  12/ 7777,  24/ (A),  12/ (P).
* 
*         THE 7777 FLAG IN BYTES 0-1 IS THE INDICATION THAT THE PP
*         IS AT BREAKPOINT.  THIS WORD REMAINS SET AS INDICATED AS
*         LONG AS THE PP REMAINS AT BREAKPOINT.  THE 7777-S SERVE 
*         AS THE INTERLOCK BETWEEN *DSD* AND THE PP.  CLEARING OF 
*         BYTE 0 CAUSES THE BREAKPOINT PACKAGE TO READ A COMMAND
*         FROM MB+5.
* 
* 
* 
*         A *V* DISPLAY AND THE FOLLOWING SET OF *DSD* COMMANDS 
*         PROVIDE THE USER ACCESS TO THE BREAKPOINT PACKAGE.
* 
* 
*         PPNN.G.                      RELEASE PP FROM BREAKPOINT.
* 
*T, MB+5  60/ 0 
* 
* 
*         PPN.C,ADDR.                  DISPLAY PP MEMORY. 
* 
*T, MB+5  12/ 0,  24/,  12/ PBCF,  12/ ADDR 
* 
*         RETURNS - 
*T, MB+4  60/ ADDR - ADDR+4 
* 
* 
*         PPN.C,ADDR,DATA.             CHANGE PP MEMORY.
* 
*T, MB+5  12/ 0,  12/,  12/ DATA,  12/ PBSF,  12/ ADDR
* 
* 
*         PPN.G,ADDR.                  SET BREAKPOINT.
* 
*T, MB+5  12/ 0,  24/,  12/ PBGF,  12/ ADDR 
* 
* 
*         PPN.A,VALUE.                 SET *A* REGISTER.
* 
*T, MB+5  12/ 0,  12/,  12/ BITS 17-12,  12/ PBAF,  12/ BITS 11-0 
* 
* 
*         PPN.P,ADDR.                  SET *P* REGISTER.
* 
*T, MB+5  12/ 0,  24/,  12/ PBPF,  12/ ADDR 
* 
* 
* 
*         THE FOLLOWING FUNCTIONS ARE ALSO SUPPORTED BY *DSD*.
* 
*         PPN.EXR.                     TRAP ON OVERLAY LOAD.
* 
*         PPN.FTN.                     TRAP ON *FTN* CALL.
* 
*         PPN.S.                       STEP ONE INSTRUCTION.
* 
*         PPN.SX.                      STEP ONE INSTRUCTION.
*                                      (DON-T FOLLOW RJM-S) 
          SPACE  4,10 
***       CAUTIONS. 
* 
*         SETTING A BREAKPOINT REPLACES TWO WORDS OF PP MEMORY WITH 
*                RJM   BKP
*         WHEN THE BREAKPOINT IS TAKEN, THESE TWO WORDS ARE RESTORED. 
*         THE BREAKPOINT MUST BE SET IN EXECUTABLE CODE.
*         THE BREAKPOINT MUST BE SET ON A PP INSTRUCTION BOUNDARY.
* 
*         *7BK* DEPENDS ON PP LOCATIONS 7515-7777.  IF THESE ARE
*         ALTERED BY THE RUNNING PP, *7BK* WILL PROBABLY FAIL IN
*         A MOST UNGRACEFUL FASHION.
* 
*         A MASS-STORAGE ERROR WILL CAUSE THE DRIVER ERROR PROCESSOR
*         TO OVERLAY *7BK*. 
* 
*         *7BK* MUST BE CM RESIDENT.
          TITLE  MAIN ROUTINE.
          ORG    7515 
 O"PBK7"  BSS    0
 Q1       SET    10001-*
          ERRNZ  Q1/5*5-Q1   OVERLAY LOAD DESTROYS DIRECT CELLS 
 BKP      SPACE  4,10 
**        BKP - MAIN ROUTINE. 
  
  
*         PBSF - SET PP MEMORY. 
  
 BKP6     ZJN    BKP9        IF CHANGING LOCATION ZERO
          LDM    BKCW+2 
          STI    T0          STORE MEMORY VALUE 
          LDD    T0 
  
*         PBCF - COPY 5 BYTES TO MB+4.
  
 BKP8     ZJN    BKP10       IF DISPLAYING LOCATION ZERO
          STM    BKPE 
          LDD    MA          CM ADDRESS 
          ADN    4
          CWM    **,ON       COPY TO MESSAGE BUFFER 
 BKPE     EQU    *-1
          UJN    BKP11       LOOP 
  
 BKP9     LDM    BKCW+2      CHANGE (T0)
          STM    BKPF 
 BKP10    LDM    BKPF        RESTORE (T0) 
          STD    T0 
          LDD    MA          COPY DIRECT CELLS TO CM
          ADN    4
          CWD    T0 
 BKP11    LJM    BKP3        LOOP 
  
*         PBAF - SET *A* REGISTER.
  
 BKP12    STM    BKPG+1      RESET (A)
          LDM    BKCW+2 
          LPN    77          BITS 12 - 17 
          LMC    LDCI 
          STM    BKPG 
          UJN    BKP11       LOOP 
  
*         PBPF - SET *P* REGISTER.
  
 BKP13    STM    BKP
          UJN    BKP11       LOOP 
  
*         PBGF - SET PP BREAKPOINT AND GO.
  
 BKP14    LDI    T0          SAVE INSTRUCTION WORD
          STM    BKPB 
          LDC    RJMI        INSERT RETURN JUMP 
          STI    T0 
          AOD    T0 
          LDI    T0          SAVE INSTRUCTION WORD
          STM    BKPC 
          LDC    BKP         INSERT *RJM* ADDRESS 
          STI    T0 
  
*         PBRF - RESUME EXECUTION WITH NO BREAKPOINT. 
  
 BKP15    LDD    MA          RESTORE MB+4 AND MB+5
          ADN    4
          CWM    BKM4,ON
          CWM    BKM5,ON
          LDC    **          RESTORE (T0) 
 BKPF     EQU    *-1
          STD    T0 
 BKPG     LDC    **          RELOAD (A) 
  
 BKP      SUBR               ENTRY/EXIT 
          STM    BKPG+1 
          SHN    -14         SAVE (A) 
          LMC    LDCI 
          STM    BKPG 
          LDD    T0          SAVE (T0)
          STM    BKPF 
          LCN    2
          RAM    BKP         RETURN ADDRESS - 2 
          STD    T0 
          LDC    **          RESTORE WORDS SAVED
 BKPB     EQU    *-1
          STI    T0 
          AOD    T0 
          LDC    ** 
 BKPC     EQU    *-1
          STI    T0 
 BKP2     LDD    MA          SAVE MB+4
          ADN    4
          CRM    BKM4,ON
          CRM    BKM5,ON     SAVE MB+5
  
*         DISPLAY BREAK INFORMATION IN READABLE FORMAT. 
  
 BKP3     LDM    BKP         (P)
          STM    BKDW+4 
          LDM    BKPG+1      (A)
          STM    BKDW+3 
          LDM    BKPG 
          LPN    77 
          STM    BKDW+2 
          LDD    MA          WRITE INFORMATION TO MB+5
          ADN    5
          CWM    BKDW,ON
  
*         WAIT FOR OPERATOR INTERACTION.
  
 BKP4     LDD    MA          READ COMMUNICATIONS WORD 
          ADN    5
          CRM    BKCW,ON
          LDM    BKCW        CHECK FOR COMMAND FROM *DSD* 
          LMC    7777 
          ZJN    BKP4        IF NONE
          LDM    BKCW+3 
          SBN    PBFM 
 BKP5     PJN    BKP3        IF COMMAND OUTSIDE TABLE 
          ADC    PBFM+TCMD
          STD    T0 
          LDI    T0          ADDRESS OF PROCESSOR 
          STM    BKPD 
          ZJN    BKP5        IF NO PROCESSOR
          LDM    BKCW+4 
  
*         EXIT TO PROCESSOR WITH (A) = (T0) = BYTE 4 OF COMMAND WORD. 
  
          STD    T0 
          LJM    **          JUMP TO PROCESSOR
 BKPD     EQU    *-1
          SPACE  4,10 
**        TABLE OF COMMAND PROCESSORS.
  
  
 TCMD     INDEX 
          INDEX  PBRF,BKP15  GO 
          INDEX  PBCF,BKP8   DISPLAY PP MEMORY
          INDEX  PBGF,BKP14  SET BREAKPOINT AND GO
          INDEX  PBSF,BKP6   CHANGE PP MEMORY 
          INDEX  PBAF,BKP12  CHANGE (A) 
          INDEX  PBPF,BKP13  CHANGE (P) 
          INDEX  PBFM 
          SPACE  4,10 
**        COMMUNICATION WORDS.
  
  
 OPBK     BSS    0
 BKCW     BSS    5           COMMAND WORD 
 BKDW     CON    7777        DISPLAY WORD 
          CON    7777 
          BSS    2           (A)
          BSS    1           (P)
 BKM4     BSS    5           MB+4 SAVE AREA 
 BKM5     BSS    5           MB+5 SAVE AREA 
  
  
          ERRNG  10000-3*5-*  BOOTSTRAP OVERLAYS BREAKPOINT CODE
 PBK      SPACE  4,10 
**        PBK - PRESET BREAKPOINT.
* 
*         USES   CM - CM+4. 
  
  
          ORG    OPBK 
  
 PBK      LDC    PLDP        FETCH PLD POINTER
          CRD    CM 
          LDD    CM          FWA OF PLD 
          SHN    14 
          ADD    CM+1 
          SBN    1           CHECK BREAKPOINT CRITERIA
          CRD    CM 
          LDD    CM 
          ZJN    PBK1        IF NO CP SPECIFIED 
          LMD    CP 
          NJN    PBK2        IF NOT CORRECT CP
 PBK1     LDM    PLL         SAVE *PLL* CALL ADDRESS
          STM    BKP
          LDC    PBK3        CHANGE *PLL* TO REENTER *7BK*
          STM    PLLD 
 PBK2     LDN    0           CLEAR CPA ADDRESS (IF ANY) 
          STD    CM 
          LCN    0           SET UP COMMUNICATIONS CONTROL WITH *DSD* 
          STM    BKDW 
          STM    BKDW+1 
          LDD    OA          SET PARAMETERS IN OR 
          CWD    CM 
          LJM    PLL2        LOAD PROGRAM 
  
*         REENTER HERE WITH *RJM*  FROM *PLL* AFTER LOADING PROGRAM.
  
 PBK3     BSS    1
          LDC    FTN         RESTORE *PAUSE* MACRO IN *PLL* 
          STM    PLLD 
          LJM    BKP2        ENTER MAIN LOOP
  
  
  
          ERRNZ  PBK4-BKM4   CHANGE DEFINITION IN *COMSMSC* 
          ERRNZ  PBK5-BKM5   CHANGE DEFINITION IN *COMSMSC* 
          ERRNZ  PBKE-EXR-7  CHANGE DEFINITION IN *COMSMSC* 
          ERRNZ  PBKF-FTN-1  CHANGE DEFINITION IN *COMSMSC* 
  
  
          ERRNG  10000-*     CHECK FOR PP OVERFLOW
          BSS    10000-*
          CON    PBK-1       ENTRY TO *7BK* 
          QUAL   *
  
          TTL    PPR - PP RESIDENT. 
          END 
