          CTEXT  CTI$TWO PORT MUX ROUTINES.                             
          SPACE  4                                                      
QUAL$     IF     -DEF,QUAL$                                             
          QUAL   COMPTMA                                                
QUAL$     ENDIF                                                         
          BASE   M                                                      
          CODE   DECIMAL                                                
*         COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992              
          SPACE  4                                                      
***       COMPTMA - TWO-PORT MULTIPLEXOR ACCESS.                        
*         B. R. HANSON                                                  
          SPACE  4                                                      
***              COMPTMA DEFINES ROUTINES TO TALK WITH A TERMINAL       
*         ON THE TWO PORT MULTIPLEXOR.  THESE ROUTINES OBSERVE THE      
*         PROTOCOL FOR ACCESSING A PORT ON THE MULTIPLEXOR AND FOR      
*         TALKING WITH THAT PORT.  THIS PROTOCOL PROVIDES FOR SHARING   
*         THE PORT AND THE MULTIPLEXOR BETWEEN PP PROGRAMS AND          
*         OPERATING SYSTEMS.                                            
*                                                                       
*         THE PROTOCOL FOR ACCESSING A TERMINAL ON THE TWO PORT MUX     
*         IS AS FOLLOWS.                                                
*                                                                       
*         THE IOU TEST-MODE REGISTER (A0) CONTAINS SIX BITS RESERVED    
*         FOR SOFTWARE USE - BITS 58-63.  THEY ARE DEFINED AS           
*                58 - PORT 1 RE-REQUESTED.                              
*                59 - PORT 0 RE-REQUESTED                               
*                60 - PORT 1 REQUESTED.                                 
*                61 - PORT 0 REQUESTED.                                 
*                62 - PORT 1 RESERVED.                                  
*                63 - PORT 0 RESERVED.                                  
*                                                                       
*         WHEN A PP PROGRAM WANTS TO USE A PORT ON THE TWO PORT MUX,    
*         IT MUST SET THE *RESERVED* BIT IN THE TEST-MODE REGISTER.  IF 
*         THAT BIT IS ALREADY SET, IT MAY SET THE *REQUESTED* BIT IN    
*         THE REGISTER AND WAIT FOR THE OTHER PP TO RELEASE THE PORT    
*         BY CLEARING THE *RESERVED* BIT.                               
*                                                                       
*         IF A PP HAS RELIQUISHED ACCESS TO THE PORT TO ANOTHER         
*         REQUESTING PP.  IT SHOULD SET THE RE-REQUESTED BIT TO         
*         INDICATE THAT IT WISHES TO REACQUIRE THE PORT BUT IS          
*         WILLING TO WAIT FOR THAT ACCESS.                              
*                                                                       
*         THE SHARING OF THE TWO-PORT MULTIPLEXOR BETWEEN TWO PP-S      
*         TALKING TO SEPERATE PORTS ON THE MULTIPLEXOR IS THROUGH       
*         THE CHANNEL 15 AND 17 FLAGS.  SINCE THE *SCF* INSTRUCTION     
*         FOR CHANNEL 15 DOES NOT GUARANTEE EXCLUSIVE ACCESS TO THE     
*         CHANNEL, THE CHANNEL FLAG FOR CHANNEL 17 MUST BE USED TO      
*         ENSURE THIS CONDITION.  THE SEQUENCE OF ACCESS TO CHANNEL     
*         15 SHOULD BE -                                                
*                                                                       
*         SCF 17             INTERLOCK CHANNEL 17                       
*         SCF 15             INTERLOCK CHANNEL 15                       
*         CCF 17             CLEAR INTERLOCK ON 17                      
*         SELECT PORT                                                   
*         STATUS PORT                                                   
*         PERFORM IO OPERATION                                          
*         DESELECT PORT                                                 
*         CCF 15             CLEAR INTERLOCK ON 15                      
*                                                                       
*         THE FUNCTIONS PROVIDED BY THIS COMMON DECK ARE -              
*      *STM* - SELECT TERMINAL ON MULTIPLEXOR.  GAINS ACCESS TO         
*           A SPECIFIC PORT ON THE MULTIPLEXOR.                         
*      *CPR* - CHECK FOR PORT REQUEST.  CHECKS THE TEST-MODE REGISTER   
*           FOR REQUESTS FOR ACCESS TO THE PORT BEING USED.             
*      *RCT* - READ CHARACTER FROM TERMINAL.  PERFORMS THE OPERATIONS   
*           NECESSARY TO READ A CHARACTER FROM THE TERMINAL ON THE      
*           PORT BEING USED.                                            
*      *WCT* - WRITE CHARACTER TO TERMINAL.  PERFORMS THE OPERATIONS    
*           NECESSARY TO WRITE A CHARACTER TO THE TERMINAL CONNECTED    
*           TO THE PORT BEING USED.                                     
*      *GTS* - GET TERMINAL STATUS.  GETS JUST THE STATUS INFORMATION   
*           FOR THE PORT BEING USED.                                    
          SPACE  4,10                                                   
          PURGMAC DCN*                                                  
 DCN*     PPOP   4,7500      DEFINE *DCN**                              
          SPACE  4                                                      
**        GLOBAL DATA FOR ALL ROUTINES.                                 
*                                                                       
                                                                        
                                                                        
 RBUF     BSSZ   10          MAINTENANCE REGISTER BUFFER                
 SFMX     CON    0           PORT SELECT FUNCTION                       
 SSMX     CON    0           LAST TERMINAL STATUS                       
 CPA      SPACE  4                                                      
**        CPA - CLEAR PORT ACCESS.                                      
*                                                                       
*         ENTRY  TWO-PORT MUX IS RESERVED BY THIS PP.                   
*                                                                       
*         EXIT   TWO-PORT MUX IS DESELECTED AND CHANNEL IS RELEASED.    
                                                                        
                                                                        
 CPA      SUBR               ENTRY/EXIT                                 
          FNC    MXDM,MX     DESELECT MULTIPLEXOR                       
          AJM    *,MX        WAIT FOR FUNCTION COMPLETE                 
          CCF    *,MX        RELEASE CHANNEL INTERLOCK                  
          UJN    CPAX        RETURN                                     
 CPR      SPACE  4,10                                                   
**        CPR - CHECK FOR PORT REQUEST.                                 
*                                                                       
*         ENTRY  PORT RESERVED BY THIS PP.                              
*                                                                       
*         EXIT   (A) = 1/REREQUESTED, 0, 1/REQUESTED                    
*                                                                       
*         CALLS  RSB.                                                   
                                                                        
                                                                        
 CPR      SUBR               ENTRY/EXIT                                 
          RJM    RSB         READ STATUS BITS                           
          SHN    -2          IGNORE PORT RESERVED BIT                   
          UJN    CPRX        RETURN                                     
 DLY      SPACE  4,10                                                   
**        DLY - DELAY FOR .05 OF A SECOND.                              
*                                                                       
*         ENTRY  NONE.                                                  
*                                                                       
*         EXIT   0.05 SECONDS LATER.                                    
*                                                                       
*         USES   A.                                                     
                                                                        
                                                                        
 DLY      SUBR               ENTRY/EXIT                                 
          LDC    100000                                                 
 DLY1     SBN    1                                                      
          PJN    DLY1        IF DELAY NOT EXPIRED                       
          UJN    DLYX        RETURN                                     
 DTO      SPACE  4,10                                                   
**        DTO    DEAD MAN TIMEOUT CHECK                                 
*                                                                       
*         ENTRY  (A) = WORD COUNT FROM READMR                           
*                                                                       
*         THIS ROUTINE WILL PRINT A DEADMAN                             
*         TIMEOUT MESSAGE IF A IS NON ZERO.                             
                                                                        
                                                                        
 DTO      SUBR   ENTRY/EXIT                                             
          ZJN    DTOX        IF COMPLETED NORMALLY                      
          PRINT  DTOM                                                   
          LJM    CMDX        RETURN FROM COMMAND                        
                                                                        
 DTOM     ASCII  (DEADMAN TIMOUT)                                       
 GTS      SPACE  4,10                                                   
**        GTS - GET TERMINAL STATUS.                                    
*                                                                       
*         ENTRY  NONE.                                                  
*                                                                       
*         EXIT   (A) = STATUS OF TERMINAL.                              
*                                                                       
*         CALLS  CPA, SPA.                                              
                                                                        
                                                                        
 GTS      SUBR               ENTRY/EXIT                                 
          RJM    SPA         SET PORT ACCESS                            
          RJM    CPA         CLEAR PORT ACCESS                          
          UJN    GTSX        RETURN                                     
 IFN      SPACE  4,10                                                   
**        IFN - ISSUE FUNCTION                                          
*                                                                       
*         ENTRY  (A) = FUNCTION TO BE ISSUED                            
*                PORT SELECTED                                          
                                                                        
                                                                        
 IFN      SUBR               ENTRY/EXIT                                 
          FAN    MX          ISSUE FUNCTION CODE                        
          AJM    *,MX        WAIT FOR FUNCTION COMPLETE                 
          UJN    IFNX                                                   
 RCT      SPACE  4,10                                                   
**        RCT - READ CHARACTER FROM TERMINAL.                           
*                                                                       
*         ENTRY  PORT RESERVED BY THIS PP.                              
*                                                                       
*         EXIT   (A) = CHARACTER DESIRED.                               
*                (A) = 0, IF NO CHARACTER PRESENT.                      
*                                                                       
*         CALLS  CPA, SPA, WCT.                                         
                                                                        
                                                                        
 RCT1     FNC    MXRD,MX     READ CHARACTER FUNCTION                    
          AJM    *,MX        WAIT FOR FUNCTION COMPLETE                 
          ACN    MX                                                     
          IAN    MX                                                     
          DCN*   MX                                                     
          RJM    CPA         CLEAR PORT ACCESS                          
                                                                        
 RCT      SUBR               ENTRY/EXIT                                 
          RJM    SPA         START PORT ACCESS                          
          SHN    21-3                                                   
          MJN    RCT1        IF CHARACTER PRESENT                       
          RJM    CPA         CLEAR PORT ACCESS                          
          LDN    0                                                      
          UJN    RCTX        RETURN WITH NO CHARACTER                   
 RSB      SPACE  4,10                                                   
**        RSB - READ STATUS BITS.                                       
*                                                                       
*         ENTRY  (RSBA) = SET BASED ON PORT BEING USED.                 
*                                                                       
*         EXIT   (A) = 1/RE-REQUESTED, 1/0, 1/REQUESTED,                
*                                      1/0, 1/RESERVED.                 
*                                                                       
*         USES   (RBUF - RBUF+7).                                       
*                                                                       
*         MACROS READMR.                                                
                                                                        
                                                                        
 RSB      SUBR               ENTRY/EXIT                                 
          READMR RBUF,ELIO,ITMR                                         
          LDM    RBUF+7      FETCH BITS 59-63                           
 RSBA     SHN    0           (IF PORT 0 BEING USED)                     
*         SHN    -1          (IF PORT 1 BEING USED)                     
          LPN    25B                                                    
          UJN    RSBX        RETURN                                     
 RTM      SPACE  4,10                                                   
**        RTM - RELEASE TERMINAL ON MULTIPLEXOR.                        
*                                                                       
*         ENTRY  THIS TERMINAL HAS ACCESS TO THE TERMINAL.              
*                                                                       
*         EXIT   THE FLAGS IN THE TEST MODE REGISTER RESET.             
*                                                                       
*         USES   AP, SFMX.                                              
*                                                                       
*         CALLS  RSB, USB.                                              
*                                                                       
*         MACROS LOCKMR.                                                
                                                                        
                                                                        
 RTM      SUBR               ENTRY/EXIT                                 
          LDD    AP          CHECK IF PORT ATTACHED                     
          ZJN    RTMX        IF PORT DETACHED                           
          LOCKMR SET                                                    
          RJM    RSB         READ STATUS BITS                           
          LDC    5S12+0                                                 
          RJM    USB         CLEAR RESERVED/REQUESTED BITS              
          LOCKMR CLEAR                                                  
          LDN    0                                                      
          STD    AP          CLEAR PORT ATTACHED                        
          STM    SFMX        CLEAR ACCESS CODE                          
          UJN    RTMX        RETURN                                     
 SPA      SPACE  4,10                                                   
**        SPA - START PORT ACCESS.                                      
*                                                                       
*         ENTRY  PORT RESERVED BY PP.                                   
*                (SFMX) = FUNCTION CODE TO SELECT PORT.                 
*                                                                       
*         EXIT   PORT ACCESS OBTAINED.                                  
*                (A) = MUX STATUS.                                      
                                                                        
                                                                        
 SPA      SUBR               ENTRY/EXIT                                 
          LDM    LOCK                                                   
          ZJN    SPA0        IF MDD HAS NOT SET A LOCK                  
          SCF    *,MX        INSURE MUX CHANNEL FLAG SET                
          UJN    SPA2        JUST GET MX                                
                                                                        
 SPA0     LDC    1000D       RESET FULL TIMEOUT                         
          STD    T0          STORE TIMEOUT FOR CTE                      
 SPA1     SCF    SPA9,MR     GET ACCESS TO MAINTENANCE CHANNEL          
          SCF    SPA4,MX     GET ACCESS TO TWO-PORT MULTIPLEXOR         
          CCF    *,MR                                                   
 SPA2     LDN    0                                                      
          STM    SPAC        CLEAR MESSAGE SENT FLAG                    
          LDM    SFMX                                                   
          ZJN    SPA3        IF NO FUNCTION TO ISSUE                    
          RJM    IFN         SELECT PORT                                
          FNC    MXSS,MX     FETCH PORT STATUS                          
          AJM    *,MX        WAIT FOR FUNCTION COMPLETE                 
          ACN    MX                                                     
          IAN    MX                                                     
          DCN    MX                                                     
 SPA3     STM    SSMX        SAVE TERMINAL STATUS                       
          UJP    SPAX        RETURN                                     
                                                                        
 SPA4     CCF    *,MR                                                   
          LDN    77          WAIT A BIT                                 
          SBN    1                                                      
          NJN    *-1                                                    
          RJM    CTE         CHECK FOR TIME OUT                         
          MJN    SPA5        IF TIMED OUT                               
          UJP    SPA1        TRY AGAIN FOR MX FLAG                      
                                                                        
 SPA5     AOML   C15H        ADD ONE TO CH-15 ERROR COUNT               
          LDM    SPAC                                                   
          NJN    SPA7        IF MESSAGE ALREADY SENT                    
          LDC    =C* CHANNEL 15 HUNG *                                  
          LMC    ERLN                                                   
          STM    SPAC        SET MESSAGE SENT FLAG                      
          RJM    DFM         SEND MESSAGE TO ERROR LOG                  
 SPA7     LJM    SPA0                                                   
                                                                        
 SPA8     AOML   C17H        ADD ONE TO CH-17 ERROR COUNT               
          LDN    10          RESET TIMEOUT                              
          STD    T0                                                     
                                                                        
 SPA9     RJM    CTE         CHECK FOR TIME OUT                         
          MJN    SPA8        IF EXPIRED                                 
          LJM    SPA1        RETRY                                      
                                                                        
 SPAC     CON    0           DAYFILE MESSAGE SENT                       
 STM      SPACE  4,10                                                   
**        STM - SELECT TERMINAL ON MULTIPLEXOR.                         
*                                                                       
*         ENTRY  (A) = TERMINAL TO OBTAIN ACCESS TO.                    
*                                                                       
*         EXIT   (A) = 0, IF ACCESS FAILED.                             
*                                                                       
*         CALLS  DLY, RSB, USB.                                         
*                                                                       
*         USES   AP, RSBA, SFMX, T2, USBA.                              
*                                                                       
*         MACROS LOCKMR.                                                
                                                                        
                                                                        
 STM3     LDC    25S12+1                                                
          STM    STMA        SAVE FACT PORT ACQUIRED                    
          RJM    USB         SET PORT RESERVED, PORT NOT REQUESTED      
          LOCKMR CLEAR                                                  
          LDN    1                                                      
          STD    AP          SET PORT ATTACHED FLAG                     
                                                                        
 STM      SUBR               ENTRY/EXIT                                 
          ADC    MXPT        FORM PORT SELECT FUNCTION                  
          STM    SFMX                                                   
          LMC    SHNI&MXPT   FORM SHIFT INSTRUCTION                     
          STM    USBA                                                   
          LMN    77          COMPLEMENT SHIFT COUNT                     
          STM    RSBA                                                   
          LDN    0                                                      
          STD    T2                                                     
                                                                        
 STM0     LOCKMR SET                                                    
          RJM    RSB         READ STATUS BITS                           
          LPN    1                                                      
          ZJN    STM3        IF PORT IS FREE                            
          LDC    0                                                      
 STMA     EQU    *-1         PORT ACQUIRED BEFORE FLAG                  
          ZJN    STM1        IF NEVER ACQUIRED                          
          LDC    20S12+20                                               
          UJN    STM1.5                                                 
 STM1     LDC    4S12+4                                                 
 STM1.5   RJM    USB         SET PORT REQUESTED BIT                     
          LOCKMR CLEAR                                                  
          RJM    DLY         DELAY .05 SECONDS                          
          SOD    T2                                                     
          NJN    STM0        TRY AGAIN                                  
          LDN    0                                                      
          STM    AP          CLEAR PRT ATTACHED FLAG                    
          STM    SFMX        CLEAR PORT SELECT FUNCTION                 
          LJM    STMX        RETURN                                     
 USB      SPACE  4,10                                                   
**        USB - UPDATE STATUS BITS.                                     
*                                                                       
*         ENTRY  (A) = 5/MASK, 7/0, 5/VALUE                             
*                (RBUF - RBUF+7) = CURRENT TESTMODE REGISTER CONTENTS.  
*                                                                       
*         EXIT   TESTMODE REGISTER REWRITTEN.                           
*                                                                       
*         USES   T1.                                                    
*                                                                       
*         MACROS WRITMR.                                                
                                                                        
                                                                        
 USB      SUBR               ENTRY/EXIT                                 
 USBA     SHN    0           (IF PORT 0)                                
*         SHN    1           (IF PORT 1)                                
          STD    T1                                                     
          SHN    -14                                                    
          ADC    SCNI        FORM MASK                                  
          STM    USBB                                                   
          LDM    RBUF+7                                                 
 USBB     SCN    0                                                      
          LMD    T1                                                     
          STM    RBUF+7                                                 
          WRITMR RBUF,ELIO,ITMR                                         
          UJN    USBX        RETURN                                     
 WCT      SPACE  4,10                                                   
**        WCT - WRITE CHARACTER TO TERMINAL.                            
*                                                                       
*         ENTRY  (A) = ASCII CHARACTER VALUE.                           
*                                                                       
*         EXIT   (A) = ENTRY VALUE.                                     
*                                                                       
*         CALLS  CPA, DLY, SPA.                                         
*                                                                       
*         USES   T1.                                                    
                                                                        
                                                                        
 WCT1     FNC    MXWT,MX     FUNCTION TO WRITE                          
          LDD    T1                                                     
          AJM    *,MX        WAIT FOR FUNCTION COMPLETE                 
          ACN    MX                                                     
          OAN    MX          OUTPUT CHARACTER                           
          DCN*   MX+40       DISCONNECT CHANNEL                         
          RJM    CPA         CLEAR PORT ACCESS                          
                                                                        
 WCT      SUBR               ENTRY/EXIT                                 
          STD    T1                                                     
 WCT2     RJM    SPA         START PORT ACCESS                          
          SHN    21-4                                                   
          MJN    WCT1        IF BUFFER NOT FULL                         
          RJM    CPA         CLEAR PORT ACCESS                          
          RJM    DLY         DELAY FOR 0.05 SECONDS                     
          UJN    WCT2        TRY TO OUTPUT AGAIN                        
          SPACE  4                                                      
          CODE   *                                                      
          BASE   *                                                      
          PURGMAC DCN*                                                  
 QUAL$    IF     -DEF,QUAL$                                             
          QUAL   *                                                      
 CPA      EQU    /COMPTMA/CPA                                           
 CPR      EQU    /COMPTMA/CPR                                           
 DTO      EQU    /COMPTMA/DTO                                           
 IFN      EQU    /COMPTMA/IFN                                           
 GTS      EQU    /COMPTMA/GTS                                           
 RCT      EQU    /COMPTMA/RCT                                           
 RSB      EQU    /COMPTMA/RSB                                           
 RTM      EQU    /COMPTMA/RTM                                           
 SFMX     EQU    /COMPTMA/SFMX                                          
 SSMX     EQU    /COMPTMA/SSMX                                          
 SPA      EQU    /COMPTMA/SPA                                           
 STM      EQU    /COMPTMA/STM                                           
 WCT      EQU    /COMPTMA/WCT                                           
 QUAL$    ENDIF                                                         
          ENDX                                                          
