program super_scroller;

{$M $800,0,0 }   { 8K stack, no heap }
uses dos;

type
  screen = array [1..25,1..160] of char;

var
  n:integer;
  a:char;
  normint:procedure;

  function getchar(x,y:integer):char;
  var
    t:screen absolute $b800:0000;
  begin
    getchar:=t[y,x*2-1];
  end;

  procedure putchar(x,y:integer;ch:char);
  var
    t:screen absolute $b800:0000;
  begin
    t[y,x*2-1]:=ch;
  end;

{$f+}
  procedure scroll; interrupt;
  var
    ch:char;
    i,j,x,y:integer;
  begin
    n:=random(25)+1;
    for j:=1 to random(10)+1 do
    begin
    ch:=getchar(1,n);
    for i:=1 to 79 do
    begin
      putchar(i,n,getchar(i+1,n));
    end;
    putchar(80,n,ch);
    if ch=chr($ff) then setIntVec($8,Addr(normint));
    end;
    inline ($9C); { PUSHF -- Push flags }
    normint;
  end;
{$f-}

begin
{  gotoxy(1,25);
  write('This is a test!');
  for n:=1 to 200 do
  begin
      scroll;
  end;}
  n:=0;
  GetIntVec($8,@normint);
  SetIntVec($8,Addr(scroll));
{  gotoxy(1,25);
  write('This is a test');
  gotoxy(1,1);
{  repeat
  until keypressed;
{  for n:=1 to 30 do readln;}
{  setIntVec($8,Addr(normint));}
  keep(0);
end.
