****************************************************************                
         SYSTEM   OPTIONS                                                       
*                                                              *                
*                                                              *                
*        R B M - 2  C H E C K P O I N T / R E S T A R T        *                
*                                                              *                
*                                                              *                
****************************************************************                
         PAGE                                                                   
         DO       #MAP=0                                                        
         SYSTEM   SIG5P                                                         
         DEF      A:CKPT                                                        
         DEF      CKPTEXIT                                                      
OLAYFLAG EQU      'CKPT'                                                        
         SYSTEM   CPRMON                                                        
         LOCAL    TEMP                                                          
         TITLE    '**** DO CHECKPOINT ****'                                     
*                                                                               
*                                   PERFORMS CHECKPOINT AND RESTART             
*                                                                               
TEMP     EQU      TEMP1                                                         
ENABLE   EQU      X'27'                                                         
DISABLE  EQU      X'37'                                                         
*                                                                               
CKPT     RES      0                                                             
A:CKPT   EQU      CKPT                                                          
         LB,R0    K:CTST                                                        
         CI,R0    X'80'             IS THIS A CKPT RUN                          
         BAZ      B01               NO, MUST BE RESTART THEN                    
         LB,R0    K:JCP1            YES, IS BCKG ACTIVE                         
         CI,R0    X'40'                                                         
         BAZ      A07               NO, DON'T HAVE TO WRITE RAD                 
         LW,R1    KL20                                                          
         STS,R1   K:JCP1            FLAG:  BKG CKPTED                           
*        BAL,R8   A61               STOP BKG                                    
A03      MTB,0    IOQ3                                                          
         BEZ      A06               B IF NO BKG I/O TO RUN DOWN                 
         LH,R1    DCT1              # OF DEVICES                                
A04      LB,R0    DCT5,R1           SEARCH FOR                                  
         CI,R0    X'08'             KEYIN PENDING                               
         BANZ     A05               FOUND ONE                                   
         BDR,R1   A04                                                           
         B        CKPTEXIT                                                      
A05      LI,R9    TYPE16            ABORT BACKGROUND                            
         BAL,R8   A90               BECAUSE I/O IS HUNG                         
         LI,R9    PRINT16           WAITING FOR KEYIN                           
         BAL,R8   A90               AND FOREGROUND CAN'T                        
         B        A12               WAIT THAT LONG....                          
A06      LI,R1    X'20'                                                         
         LI,R0    0                                                             
         STS,R0   K:JCP1            CLEAR FLAG THAT ALARM TYPED                 
         LI,R1    5                                                             
         LB,R0    MDFLAG,R1         CHECK IF THE AREA                           
         CI,R0    ALLOC             IS ALLOCATED                                
         BAZ      A10               NO, CAN'T DO CKPT                           
         LI,R7    0                                                             
         BAL,R8   A80               GO WRITE BCKG. ON RAD                       
         LI,R9    TYPE8             TYPE 'BCKG CKPT'                            
         BAL,R8   A90                                                           
         B        A072                                                          
A07      LI,R9    TYPE9             TYPE 'BKG IN USE BY FGD'                    
         BAL,R8   A90                                                           
         LW,R1    KL10                                                          
         STS,R1   K:JCP1            BKG AREA IN USE BY FGD                      
A072     LW,R0    K:BCKEND                                                      
         STW,R0   K:FGDBG4          SAVE K:BCKEND FOR RESTART                   
         LI,R0    0                                                             
         XW,R0    K:BPOOL           ZERO BKG BLOCKING BUFF PTR                  
         STW,R0   BPSAV             SAVE VALUE FOR RESTORE                      
         LW,R0    *BPSAV            SAVE NO. OF BKG BB'S                        
         STW,R0   BPSAV+1                                                       
         LW,R0    FPSAV             FGD BLOCKING BUFS OVERLAID                  
         BEZ      A075              BRANCH IF NOT                               
         LW,R1    K:UNAVBG          REBUILD FGD BLKING BUF CONTROLS             
         SW,R1    FPSAV                                                         
         SLS,R1   -8                                                            
         STW,R1   *FPSAV            NR OF BUFFERS                               
         LW,R0    K:UNAVBG                                                      
         AI,R0    -256                                                          
         STW,R0   *FPSAV,R1         ADDR OF BUFFER                              
         BDR,R1   %-2               INDEX FOR NEXT BUFFER                       
         LI,R0    0                                                             
         XW,R0    FPSAV                                                         
         STW,R0   K:FPOOL           RESTORE FGD BLOCKING BUFF PTR               
A075     LW,R0    K:FGDBG1                                                      
         SLS,R0   -9                GET CURRENT FGD FWA MOD 8                   
         STB,R0   K:FGDBG4          SAVE IT FOR RESTART                         
         LW,R0    K:BACKBG                                                      
         STW,R0   K:BCKEND          CHANGE LWA OF BCKG AND                      
         STW,R0   K:FGDBG1            FWA OF FGD                                
         BAL,R8   A70               GO SET UP WRITE LOCKS                       
         LW,R1    KLE0                                                          
         LW,R0    KL40              CLEAR CKPT, RESTART BITS                    
         STS,R0   K:CTST            SET FGLD EXECUTE BIT                        
*                                                                               
CKPTEXIT B        CT1               RETURN TO CONTROL TASK                      
*                                                                               
A10      LI,R9    TYPE11            PRINT AND TYPE                              
         BAL,R8   A90               'CK AREA TOO SMALL'                         
         LI,R9    PRINT11                                                       
         BAL,R8   A90                                                           
A12      LW,R0    Y08               ABEX BIT                                    
         AI,R0    X'20000'          RETRY CKPT BIT                              
         LW,R1    R0                                                            
         AW,R1    Y8                CKPT BIT                                    
         AI,R1    4                 EXIT BIT                                    
         STS,R0   K:CTST            SET ABEX AND CKPT RETRY,                    
*                                   RESET CKPT AND EXIT                         
         LI,R0    0                                                             
         LW,R1    KL30              BKG CKPTED STATUS BITS                      
         AI,R1    X'C1'             PMD,JOB DEFINED BIT                         
         STS,R0   K:JCP1            RESET BKG CKPTED STATUS AND                 
*                                   JOB DEFINED (FORCE BKG JOB INACT)           
         B        CKPTEXIT                                                      
**       SUBROUTINE TO START OR STOP BKG IF IT IS ACTIVE AND NOT                
**       ALREADY IN WAIT                                                        
**                                                                              
*A60     LI,R9    STRTCODE                                                      
*        B        %+2                                                           
*A61     LI,R9    STOPCODE                                                      
*        LW,R10   K:JCP1                                                        
*        CW,R10   Y4                                                            
*        BAZ      *R8               RETURN IF BKG INACTIVE                      
*        LW,R10   K:CTST                                                        
*        CW,R10   Y01                                                           
*        BANZ     *R8               RETURN IF BKG IS ALREADY IDLE               
*        LCI      STST%-STST                                                    
*        LM,R10   STST              LOAD START/STOP FPT                         
*        STB,R9   R10               START OR STOP CODE                          
*        CAL1,7   R10                                                           
*        B        *R8               RETURN                                      
**                                                                              
*STST    DATA     X'7F800000'                                                   
*        DATA     P3+P11+F7         TASK NAME, JOB NAME, IGNORE ERRORS          
*        DATA     'BKG '                                                        
*        DATA     'BKG '                                                        
*STST%   RES      0                                                             
**                                                                              
*STRTCODE EQU     X'4A'                                                         
*STOPCODE EQU     X'4B'                                                         
**                                                                              
         B        A07                                                           
*                                   SBR TO CHANGE WRITE LOCKS FOR CKPT          
*                                     AND RESTART                               
*                                   CALL IS   BAL,R8   A70                      
*                                                                               
*                                                                               
*                                                                               
*                                                                               
*                                                                               
A70      LW,R10   R8                SAAVE RETURN ADDRESS                        
         LW,R4    K:UNAVBG                                                      
         SLS,R4   -9                R4=TOTAL NO. OF WRITE LOCKS                 
         LW,R2    K:BACKBG                                                      
         SLS,R2   -9                R2=NO. WRITE LOCKS FOR RBM                  
         LW,R3    K:FGDBG1                                                      
         BNEZ     %+4               FGD AREA DEFINED                            
         STW,R4   R3                NOFGD                                       
         LI,R4    0                                                             
         B        %+3                                                           
         SLS,R3   -9                                                            
         SW,R4    R3                R4=NO. WRITE LOCKS FOR FGD                  
         SW,R3    R2                R3=NO. WRITE LOCKS FOR BCKG.                
         LI,R9    3                 MASK TO STORE WRITE LOCKS                   
         LI,R7    0                 INDEX FOR WLOCK                             
         LI,R5    0                 SECONDARY INDEX                             
A72      LW,R6    R2,R5                                                         
         BEZ      A74               NO WRITE LOCKS FOR THIS ENTRY               
         LW,R8    A78,R5            GET PROPER LOCK CODE                        
A73      SCS,R9   -2                SHIFT MASK                                  
         CW,R9    KLC0              BACK TO POSITION ZERO                       
         BNE      %+2               NO                                          
         AI,R7    1                 YES, STEP WRITE LOCK INDEX                  
         STS,R8   WLOCK,R7          STORE NEXT LOCK                             
         BDR,R6   A73                                                           
A74      AI,R5    1                                                             
         CI,R5    3                 LOOP THRU 3 TIMES                           
         BNE      A72                                                           
         LW,R1    WLOCK             GET TOTAL NO. WORDS                         
         SLS,R1   24                PUT IN BYTE 0                               
         LI,R0    WLOCK+1                                                       
         MMC,R0   1                 SET WRITE LOCKS                             
         B        *R10              EXIT                                        
*                                                                               
A78      DATA     X'FFFFFFFF'       WRITE LOCKS FOR  RBM                        
         DATA     X'55555555'       WRITE LOCKS FOR  BCKG                       
         DATA     X'AAAAAAAA'       WRITE LOCKS FOR  FGD                        
*                                                                               
*                                   SBR TO DO RAD I/O FOR CKPT AND              
*                                     RESTART                                   
*                                   CALL IS   BAL,R8   A80                      
*                                     WHERE R7=0 FOR WRITE RAD                  
*                                             =1 FOR READ RAD                   
*                                   USES R0-R2,R5-R14                           
*                                                                               
A80      LW,R2    R8                SAVE RETURN ADDRESS                         
         LI,R6    7                                                             
         LW,R0    F:DCB-1,R6        MOVE DCB TO TEMP STORAGE                    
         STW,R0   TEMP-1,R6                                                     
         BDR,R6   %-2                                                           
         LI,R6    4                                                             
         LW,R0    RDWTDC-1,R6       MOVE FPT TO R10-R14                         
         STW,R0   R9,R6                                                         
         BDR,R6   %-2                                                           
         LI,R14   0                 R14=GRANULE NO.  START AT 0                 
         LW,R8    K:BACKBG          R8=FWA TO READ OR WRITE                     
         LW,R9    K:FGDBG1                                                      
         SW,R9    R8                R9=NO. CELLS TO READ OR WRITE               
         CI,R7    0                 IS THIS A READ OR WRITE                     
         BNE      A81               READ                                        
         LI,R0    X'11'             WRITE                                       
         STB,R0   R10               STORE WRITE CODE IN FPT                     
A81      LI,R6    20                                                            
         LB,R5    MDDISCI,R6        GET DISC INDEX, AND THEN                    
         LH,R5    DISCNWPS,R5       WORDS PER SECTOR                            
         LI,R7    8191              8191=MAX. NO. WORDS FOR 1 I/O CALL          
         DW,R7    R5                R7=MAX. NO. SECT FOR 1 I/O CALL             
         MW,R5    R7                R5=MAX. NO. WORDS FOR 1 I/O CALL            
         STW,R8   TEMP+2            STORE FWA IN DCB                            
A82      LW,R0    R9                SAVE NO. CELLS LEFT                         
         SW,R9    R5                REDUCE NO. CELLS LEFT IN R9                 
         BLZ      %+2               LAST TIME SO USED WHAT'S LEFT               
         LW,R0    R5                NOT LAST TIME, USE MAX                      
         SLS,R0   19                                                            
         LW,R1    KLM15                                                         
         STS,R0   TEMP+3            STORE NO. BYTES IN DCB                      
         CAL1,1   R10               GO READ OR WRITE NEXT PORTION               
         CI,R9    0                 ARE WE DONE                                 
         BLE      A85               YES                                         
         AW,R14   R7                STEP GRANULE NO.                            
         AWM,R5   TEMP+2            STEP FWA                                    
         B        A82                                                           
A85      LCI      2                                                             
         LM,R11   CLOSEFPT                                                      
         CAL1,1   R11               CLOSE CK AREA                               
         B        *R2               RETURN                                      
*                                                                               
*                                   PRINT/TYPE SUBROUTINE                       
*                                                                               
A90      RES      0                                                             
         LCI      3                                                             
         LM,R10   *R9               R9 POINTS AT FPT                            
         CAL1,2   R10                                                           
         B        *R8                                                           
         TITLE    '**** DO RESTART ****'                                        
*                                                                               
*                                   THIS PORTION DOES RESTART                   
*                                                                               
B01      LB,R0    K:FGDBG4          GET FWA OF FGD BEFORE CKPT                  
         SLS,R0   9                 CHANGE TO WORD ADD.                         
         CW,R0    K:FPOOL                                                       
         BLE      B02               B IF BKG DOESNT OVERLAP FPOOL               
         LI,R1    0                                                             
         XW,R1    K:FPOOL           ZERO FGD BLOCKING BUFF PTR                  
         STW,R1   FPSAV             AND SAVE ITS VALUE FOR RESTORING            
B02      RES      0                                                             
         STW,R0   K:FGDBG1          SET FWA OF FGD                              
         LW,R0    K:FGDBG4          GET VALUE OF K:BCKEND BEFORE CKPT           
         AND,R0   KX1FFFF                                                       
         STW,R0   K:BCKEND          RESTORE K:BCKEND                            
         LB,R0    K:JCP1                                                        
         CI,R0    X'20'             IS BCKG. CKPTED ON RAD                      
         BAZ      B04               NO                                          
         LI,R7    1                 YES                                         
         BAL,R8   A80               GO READ BCKG. BACK IN FROM RAD              
         LI,R9    TYPE10            TYPE 'BCKG RESTART'                         
         BAL,R8   A90                                                           
B04      RES      0                                                             
         BAL,R8   A70               GO SET WRITE LOCKS                          
         LB,R0    K:JCP1            WAS BKG RESTORED FROM CK AREA               
         CI,R0    X'20'                                                         
         BANZ     B04A              YES                                         
         LW,R1    BPSAV+1           NO, NEED TO RESTORE BBCW                    
         STW,R1   *BPSAV                                                        
         BEZ      B04A              NONE TO RESTORE                             
         LW,R0    BPSAV             K:BPOOL POINTER                             
         AND,R0   M17                                                           
         BEZ      B04A              NO BKG BLOCKING BUFFERS                     
         MI,R1    257                                                           
         AI,R1    1                                                             
         AW,R0    R1                                                            
         LW,R1    BPSAV+1           RESTORE BKG BBCW'S                          
         AI,R0    -256                                                          
         STW,R0   *BPSAV,R1                                                     
         BDR,R1   %-2                                                           
B04A     RES      0                                                             
         LI,R0    0                                                             
         XW,R0    BPSAV                                                         
         STW,R0   K:BPOOL           RESTORE BKG BLOCKING BUFF PTR               
         LW,R1    KL30                                                          
         LI,R0    0                 CLEAR BCKG IS CKPT'D AND BCKG IN            
         STS,R0   K:JCP1              USE BY FGD BITS                           
         LW,R1    Y6                                                            
         LW,R0    Y4                                                            
         STS,R0   K:CTST            SET FGL BIT, RESET RESTART BIT              
*        BAL,R8   A60               START BKG IF NECESSARY                      
         B        CKPTEXIT                                                      
*                                   ROUTINE TO PROCESS ERROR AND ABNORM.        
*                                     RETURNS FROM CKPT RAD I/O                 
*                                                                               
*                                                                               
IOERR    LH,R0    TEMP              GET FIRST WORD OF DCB                       
         CI,R0    X'0020'           WAS DCB OPENED                              
         BAZ      %+4               B IF DCB NOT OPEN                           
         LCI      2                                                             
         LM,R11   CLOSEFPT                                                      
         CAL1,1   R11               CLOSE CK AREA                               
         B        *R2               RETURN FROM I/O SUBR                        
         LI,R1    1                                                             
         LB,R0    K:CTST                                                        
         CI,R0    X'80'                                                         
         BAZ      IOERR2            B IF FROM RESTART, NOT CKPT                 
         LB,R0    R10               GET ERROR CODE                              
         CI,R0    5                                                             
         BE       A10               END OF FILE ON CK AREA                      
         CI,R0    X'1C'                                                         
         BE       A10               END OF TAPE ON CK AREA                      
         LW,R0    KCKPT             GFT HCKPT' IN BCD                           
         B        %+2                                                           
IOERR2   LW,R0    KRST              GET 'RST'  IN BCD                           
         STH,R0   K:MSG12+4         STORE EITHER CKPT OR RST INTO MSG.          
         SLS,R0   -16                                                           
         STH,R0   K:MSG12+3,R1                                                  
         LI,R9    TYPE12            TYPE AND PRINT                              
         BAL,R8   A90               'I/O ERR ON CKPT'                           
         LI,R9    PRINT12                                                       
         BAL,R8   A90                                                           
         LB,R0    K:CTST                                                        
         CI,R0    X'80'                                                         
         BANZ     A12               B IF FROM CKPT, NOT RESTART                 
         LW,R0    Y08               ABEX BIT                                    
         LW,R1    R0                                                            
         AW,R1    Y2                RESTART BIT                                 
         AI,R1    4                 EXIT BIT                                    
         STS,R0   K:CTST            SET ABEX, RESET RESTART AND EXIT            
         LI,R0    0                                                             
         STW,R0   BPSAV             NO SAVED BKG BLKING BUF PTR                 
         LW,R1    KL30              BKG CKPTED STATUS BITS                      
         AI,R1    1                 BKG JOB DEFINED BIT                         
         STS,R0   K:JCP1            RESET BKG JOB DEFINED AND                   
*                                   BKG CKPTED STATUS                           
*                                   (FORCE BKG JOB INACTIVE)                    
         BAL,R8   A70               ADJUST WRITE LOCKS                          
*        BAL,R8   A60               START BKG IF NECESSARY                      
         B        CKPTEXIT                                                      
*                                                                               
*                                                                               
CLOSEFPT GEN,8,24 X'15',TEMP        CLOSE FPT                                   
         DATA     1                 IGNORE ERRORS                               
F:DCB    GEN,8,24  7,1              DCB FOR RAD I/O                             
         GEN,8,24  3,X'500'                                                     
         DATA      0                                                            
         GEN,15,17 0,IOERR                                                      
         DATA      IOERR                                                        
         DATA      0                ASSIGN TO WHOLE AREA                        
         DATA      0                                                            
RDWTDC   GEN,8,24   X'10',TEMP                                                  
         GEN,2,6,24 3,1,X'10'                                                   
         DATA       IOERR                                                       
         DATA       IOERR                                                       
TYPE8    GEN,8,24 2,0                                                           
         GEN,1,31 1,0                                                           
         DATA     K:MSG8                                                        
TYPE9    GEN,8,24 2,0                                                           
         GEN,1,31 1,0                                                           
         DATA     K:MSG9                                                        
TYPE10   GEN,8,24 2,0                                                           
         GEN,1,31 1,0                                                           
         DATA     K:MSG10                                                       
TYPE11   GEN,8,24 2,0                                                           
         GEN,1,31 1,0                                                           
         DATA     K:MSG11                                                       
PRINT11  GEN,8,24 1,0                                                           
         GEN,1,31 1,0                                                           
         DATA     K:MSG11                                                       
TYPE12   GEN,8,24 2,0                                                           
         GEN,1,31 1,0                                                           
         DATA     K:MSG12                                                       
PRINT12  GEN,8,24 1,0                                                           
         GEN,1,31 1,0                                                           
         DATA     K:MSG12                                                       
TYPE16   GEN,8,24 2,0                                                           
         GEN,1,31 1,0                                                           
         DATA     K:MSG16                                                       
PRINT16  GEN,8,24 1,0                                                           
         GEN,1,31 1,0                                                           
         DATA     K:MSG16                                                       
KX1FF    EQU      M9                0000 01FF                                   
KX1FFFF  EQU      M17               0001 FFFF                                   
KL001    EQU      Y001              0010 0000                                   
KL00C    DATA     X'00C00000'                                                   
KL04     EQU      Y04               0400 0000                                   
KL10     EQU      Y1                1000 0000                                   
KL20     EQU      Y2                2000 0000                                   
KL30     EQU      Y3                3000 0000                                   
KL40     EQU      Y4                4000 0000                                   
KLC0     EQU      YC                C000 0000                                   
KLE0     DATA     X'E0000000'                                                   
KLM15    EQU      YFFFE             FFFE 0000                                   
KRST     TEXT     'RST '                                                        
KCKPT    TEXT     'CKPT'                                                        
         OLAYEND                                                                
         FIN      #MAP=0                                                        
         END                                                                    
