%i "add8.sfl"

submod_class   add8 {
   input     a<8>,b<8>,ci ;
   output    sum<8>,carry ;
   instrin   do ;
   instr_arg do(a,b,ci) ;
   }

module   alu {
   input     a<8> ;
   input     b<8> ;
   output    out<8> ;
   output    zero ;
   instrin   trans_a ;
   instrin   trans_b ;
   instrin   add ;
   instrin   and ;
   instrin   xor ;
   add8      adder ;

   instruct  trans_a
      par {
        out = a ;
        zero = ^/| a ;
        }

   instruct  trans_b
      par {
        out = b ;
        zero = ^/| b ;
        }

   instruct  add
      par {
        out = adder.do(a,b,0b0).sum ;
        zero = ^/| adder.do(a,b,0b0).sum ;
        }

   instruct  and
      par {
        out = a & b ;
        zero = ^/| ( a & b ) ;
        }

   instruct  xor
      par {
        out = a @ b ;
        zero = ^/| ( a @ b ) ;
        }

   }