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*);