procedure interpret;
  const stacksize = 500;
  var p,b,t:integer; (*program base topstack registers*)
   i:instruction;
   s:array[1..stacksize] of integer; (*datastore*)

  function base(l:integer): integer;
   var b1:integer;
    begin
     b1|=b; (*find base l level down*)
     while l>0 do
      begin
       b1|=s[b1];
       l|=l-1
      end;
     base|=b1
 end (*base*);