          CTEXT  DSI$VALIDATE PP BOUNDS                                 
          SPACE  4,10                                                   
 QUAL$    IF     -DEF,QUAL$                                             
          QUAL   DSIVPB                                                 
 QUAL$    ENDIF                                                         
          BASE   M                                                      
*         COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992              
 DSIVPB   SPACE  4,10                                                   
***       DSI$VALIDATE_PP_BOUNDS.                                       
*         B. R. HANSON.      85/05/16.                                  
*         J. L. GOERGEN.     86/02/21.                                  
 DSIVPB   SPACE  4,10                                                   
***              PROVIDES ROUTINES TO VERIFY THE PP CM ACCESS VALIDATION
*         OF A GIVEN PP USING THE OS BOUNDS REGISTER.                   
 NOTE     SPACE  4,10                                                   
****      PROGRAMMING NOTES.                                            
*                                                                       
*         IMPORTANT NOTE: THERE ARE CELLS WHICH MUST BE DEFINED         
*         EXTERNAL TO THIS COMMON DECK FOR THIS DECK TO FUNCTION.       
*         THEY ARE *PPNO*,  *ISPB*, *IOUM*, *I0CC*.                     
*         IN ADDITION, IF THE SYMBOL *PPTYPE* IS DEFINED, THEN          
*         THE LOCATION *PPTY* WILL BE USED BY *SPB*.                    
****                                                                    
 CPB      SPACE  4,10                                                   
**        CPB - CHECK PP BIT IN HARDWARE REGISTER.                      
*                                                                       
*         ENTRY  (A) = PP NUMBER.                                       
*                (RDATA - RDATA+7) = MAINTENANCE REGISTER DATA.         
*                (CPBA) = (LDNI + PP_RECONFIGURATION)                   
*                (CPBB) = (SBNI + PHYSICAL_BARRELS)                     
*                                                                       
*         EXIT   (A) = PP BIT VALUE.                                    
*                                                                       
*         USES   T1, T2.                                                
*                                                                       
*         CALLS  SPM.                                                   
                                                                        
                                                                        
 CPB1     LDN    0           PRESET INDEX FOR BARREL 0                  
          STD    T2                                                     
          LDD    T1                                                     
          LPN    37          CLEAR CONCURRENT BIT                       
          STD    T1                                                     
          SBN    5           TEST CIO BARREL                            
          MJN    CPB3        IF BARREL 0                                
          LDN    1           SET INDEX FOR BARREL 1                     
          STD    T2                                                     
 CPB3     LDD    T1          GET PP NUMBER                              
          ADC    SHNI                                                   
          STM    CPBC        SET SHIFT INSTRUCTION                      
          LDN    1                                                      
 CPBC     SHN    **                                                     
 CPB4     LPML   RDATA,T2    CHECK PROPER BYTE                          
                                                                        
 CPB      SUBR               ENTRY/EXIT                                 
          STD    T1          SAVE PP NUMBER                             
          LPC    0#100       CHECK CONCURRENT BIT                       
          NJN    CPB1        IF A CIO PP                                
          LDD    T1          REGAIN PP NUMBER                           
          RJM    SPM         SET UP PP MASK AND T2                      
          UJN    CPB4        CONTINUE                                   
 SPM      SPACE  4,10                                                   
**        SPM - SET UP PP MASK.                                         
*                                                                       
*         ENTRY  (A) = PP NUMBER.                                       
*                                                                       
*         EXIT   (A) = BIT SET FOR PP NUMBER.                           
*                (T2) = PHYSICAL BARREL NUMBER.                         
*                                                                       
*         USES   T1, T2.                                                
                                                                        
                                                                        
 SPM      SUBR               ENTRY/EXIT                                 
          STD    T1          SAVE PP NUMBER                             
          LDN    0                                                      
          STD    T2                                                     
          LDD    T1                                                     
          SBN    20                                                     
          MJN    SPM1        IF IN BARRELS ZERO OR ONE                  
          STD    T1                                                     
          AOD    T2                                                     
          AOD    T2                                                     
 SPM1     LDD    T1                                                     
          SBN    5                                                      
          MJN    SPM2        IF IN LOWER HALF OF BARREL                 
          STD    T1                                                     
          AOD    T2                                                     
 SPM2     LDN    **          PP RECONFIGURATION SWITCHES                
 SPMA     EQU    *-1         (MODIFIED FROM ROUTINE *PII*)              
          RAD    T2                                                     
 SPMB     SBN    **          PHYSICAL BARRELS (MODIFIED BY *PII*)       
          MJN    SPM3        IF RECONFIGURATION OK                      
          STD    T2          RECONFIGURED TO LOWER BARREL               
 SPM3     LDC    SHNI                                                   
          ADD    T1                                                     
          STM    SPMC        SET SHIFT INSTRUCTION                      
          LDN    1                                                      
 SPMC     SHN    **                                                     
          UJN    SPMX        RETURN                                     
 CRD      SPACE  4,10                                                   
**        CRD - CALCULATE R-REGISTER DIFFERENCE.                        
*                                                                       
*         ENTRY  R-REGISTER IS SET UP.                                  
*                (RDATA - RDATA+7) = OS BOUNDS REGISTER.                
*                                                                       
*         EXIT   (A) < 0, IF OSB ADDRESS < PP ADDRESS.                  
*                (A) > 0, IF OSB ADDRESS > PP ADDRESS.                  
*                                                                       
*         USES   T3, T4.                                                
                                                                        
                                                                        
 CRD      SUBR               ENTRY/EXIT                                 
          SRD    T3                                                     
                                                                        
*         SINCE OS BOUNDS IS SCALED BY 2 ** 10 DO THE                   
*         SAME TO THE R-REGISTER.                                       
                                                                        
          LDD    T3          BUILD OSB BYTE 5                           
          SHN    -10                                                    
          STM    CRDA                                                   
          LDM    RDATA+5                                                
          SBM    CRDA                                                   
          NJN    CRDX        IF NOT EQUAL TO OS BOUNDS                  
          LDD    T3          BUILD OSB BYTE 6                           
          LPK    0#FF                                                   
          STM    CRDA                                                   
          LDM    RDATA+6                                                
          SBM    CRDA                                                   
 CRD1     NJN    CRDX        IF NOT EQUAL TO OS BOUNDS                  
          LDD    T4          BUILD OSB BYTE 7                           
          SHN    -4                                                     
          STM    CRDA                                                   
          LDM    RDATA+7                                                
          SBM    CRDA                                                   
          NJN    CRDX        IF NOT EQUAL TO OS BOUNDS                  
          LDN    1                                                      
          SHN    21-0                                                   
          UJN    CRD1        RETURN WITH (A) < 0                        
                                                                        
 CRDA     CON    0                                                      
 SPB      SPACE  4,20                                                   
**        SPB - SET PP BOUNDARY.                                        
*                                                                       
*         ENTRY  R-REGISTER SET UP.                                     
*                (PPNO) = 8/PP TYPE, 8/PP NUMBER OF CURRENT PP.         
*                (ISPB) = FLAG DEFINED IN PP TO INDICATE                
*                WHETHER TO IGNORE SETTING OS BOUNDS OR NOT.            
*                                                                       
*         EXIT   OS BOUNDS BIT IS SET FOR PARTICULAR                    
*                SITUATION SO NO ERRORS WILL OCCUR.                     
*                IF *PPTYPE* IS DEFINED, THEN (PPTY) = 0 IF UPPER PP.   
*                                                                       
*         USES   T1, T2, RDATA.                                         
*                                                                       
*         CALLS  CRD, PII, SPM.                                         
*                                                                       
*         MACROS READMR, WRITMR.                                        
*                                                                       
*         NOTES  IT IS ASSUMED THAT THE STATUS OF THE DESIGNATED        
*                PP CAN BE DETERMINED FROM THE *IOSB* MAINTENANCE       
*                REGISTER.                                              
                                                                        
                                                                        
 SPB      SUBR               ENTRY/EXIT                                 
          LDM    ISPB        GLOBAL FLAG FOR IGNORING BOUNDS SETTING    
          NJN    SPBX        IF TO IGNORE                               
          LOCKMR SET                                                    
          READMR RDATA,I0CC,IOSB                                        
          LDM    PPNO                                                   
          LPC    0#FF                                                   
          RJM    SPM                                                    
          STD    T1          SAVE MASK                                  
          RJM    CRD         GET WHICH SIDE OF BOUNDARY WRITE IS ON     
          MJN    SPB1        IF  PP ADDRESS > OSB                       
          LDD    T1          FETCH MASK                                 
          LPML   RDATA,T2                                               
          NJN    SPB3        IF LOWER PP                                
          UJN    SPB2        TOGGLE UPPER TO LOWER                      
                                                                        
 SPB1     LDD    T1          FETCH MASK                                 
          LPML   RDATA,T2                                               
          ZJN    SPB3        IF UPPER PP                                
 SPB2     LDM    RDATA,T2                                               
          LMD    T1          TOGGLE THE BOUNDS BIT                      
          STM    RDATA,T2                                               
 .A       IF     DEF,PPTYPE                                             
          LPML   T1          SAVE PP TYPE FLAG (0 = UPPER PP)           
          STM    PPTY                                                   
 .A       ENDIF                                                         
          WRITMR RDATA,I0CC                                             
 SPB3     LOCKMR CLEAR                                                  
          LJM    SPBX        RETURN                                     
 PII      SPACE  4,10                                                   
**        PII - PRESET IOU INFORMATION.                                 
*                                                                       
*         ENTRY  (I0CC) = ACCESS CODE TO IOU.                           
*                (IOUM) = MODEL OF IOU.                                 
*                                                                       
*         EXIT   (SPMA) = (LDNI + BARREL_RECONFIGURATION)               
*                (SPMB) = (SBNI + INSTALLED_BARRELS)                    
*                                                                       
*         USES   T1.                                                    
*                                                                       
*         MACROS READMR.                                                
                                                                        
                                                                        
 PII      SUBR               ENTRY/EXIT                                 
          READMR PIIC,I0CC,ISTR  IOU STATUS REGISTER                    
          READMR PIIB,I0CC,OIMR  OPTIONS INSTALLED                      
          LDN    0                                                      
          STD    T1                                                     
          LDM    PIIB+2      BARRELS INSTALLED                          
          SHN    21-1                                                   
          PJN    PII3        IF ONLY 1 BARREL                           
          SHN    21-0                                                   
          PJN    PII2        IF TWO BARRELS                             
          SHN    21-0                                                   
          PJN    PII1        IF THREE BARRELS                           
          AOD    T1                                                     
 PII1     AOD    T1          THREE BARRELS                              
 PII2     AOD    T1          TWO BARRELS                                
 PII3     AOD    T1          ONE BARREL                                 
          RAM    SPMB        SAVE INSTALLED BARRELS IN *SPM*            
          LDM    IOUM        GET ELEMENT MODEL                          
          SHN    -4                                                     
          LMN    1                                                      
          ZJN    PII4        IF MODEL I1                                
          AOM    PIIA                                                   
 PII4     LDM    PIIC+7      BARREL RECONFIGURATION                     
          SHN    -3                                                     
 PIIA     LPN    2           ONLY BIT 4 VALID ON I1                     
*         LPN    3           BITS 3 AND 4 VALID ON I2/I4                
          RAM    SPMA        STORE BARREL RECONFIGURATION IN *SPM*      
          LJM    PIIX        RETURN                                     
                                                                        
*         NOTE - TO SAVE SPACE, THE FOLLOWING BUFFERS OVERLAP           
*         THE UNUSED PORTION OF *PIIC* WITH *PIIB*.                     
                                                                        
 PIIB     BSS    1           OPTIONS INSTALLED                          
 PIIC     BSS    10          STATUS REGISTER                            
          SPACE  4,10                                                   
          BASE   *                                                      
 QUAL$    IF     -DEF,QUAL$                                             
          QUAL   *                                                      
 CPB      EQU    /DSIVPB/CPB                                            
 SPB      EQU    /DSIVPB/SPB                                            
 PII      EQU    /DSIVPB/PII                                            
 CRD      EQU    /DSIVPB/CRD                                            
 SPM      EQU    /DSIVPB/SPM                                            
 QUAL$    ENDIF                                                         
          ENDX                                                          
