%i   "inc8.sfl"
%i   "dec8.sfl"

submod_class   inc8 {
   input     a<8> ;
   output    s<8> ;
   instrin   do ;
   instr_arg do(a) ;
   }

submod_class   dec8 {
   input     a<8> ;
   output    s<8> ;
   instrin   do ;
   instr_arg do(a) ;
   }

module  sp {
/* module description of an Program Counter */
   output    out<8> ;
   reg       sp<8> ;
   instrin   dec ;
   instrin   inc ;
   instrin   reset ;
   instrin   hold ;
   inc8      inc_8 ;
   dec8      dec_8 ;

   instruct  reset
   /* if reset is active */
      par {
         sp := 0b11111111 ;
         out = sp ;
         }
   instruct hold
   /* if hold is active */
         out = sp ;
   instruct inc
   /* if inc is active */
      par {
         sp := inc_8.do(sp).s ;
         out = inc_8.do(sp).s ;
         }
   instruct dec
   /* if inc is active */
      par {
         sp := dec_8.do(sp).s ;
         out = sp ;
         }
   }