PROC Strrsreg (CHAN OF []BOOL Din, DRdout, DRsout,
               CHAN OF BOOL STRnRs, STRByte,
               CHAN OF ANY DecAin, RbAin, RdAout, RsAout)


  PROC input (CHAN OF []BOOL Din, D,
              CHAN OF BOOL STRnRs, STRByte,
              CHAN OF ANY DecAin, RbAin, Ain) 
    [32]BOOL data:
    INT i:
    BOOL byte:
    SEQ
      PAR
        Din?data                   --Bus acts like a virtual register
        STRByte?byte
      IF
        STRByte = HIGH
          SEQ i=1 FOR 3
            [data FROM i*8 FOR 8]:=[data FROM 0 FOR 8]
        TRUE
          SKIP
      D!data
      Ain?ANY
      PAR
        DecAin!ANY
        RbRin!ANY
                
  :


  --**********************************************************************

  PROC output ( CHAN OF []BOOL Dout, DRdout, DRsout
                CHAN OF BOOL Bitout, 
                CHAN OF ANY RdAout, RsAout, Aout)
 
    [32]BOOL data:
    BOOL bit:

    SEQ
      PAR
        Bitout ? bit
        Dout ? data
      IF
        bit = TRUE
          SEQ
            DRdout !data   
            RdAout?ANY
            Aout!ANY
        bit = FALSE
          SEQ
            DRsout ! data
            RsAout ? ANY
            Aout!ANY

  :

  --**********************************************************************

  CHAN OF [32]BOOL Dout, D:
  CHAN OF ANY Ain, Aout:
 
  PAR
    input (Din, D, STRnRS, STRByte, DecAin, RbAin, Ain)
    reg33_mde (DtoReg, Dout, STRnRs, Bitout, Ain, Aout)
    output (Dout, DRdout, DRsout, Bitout, RdAout, RsAout, Aout)

:









































