Плавный попиксельный Scrolling экрана в текстовом режиме

uses crt;
function clock:longint;          {чтение количества тиков}
begin
   clock:=MemL[Seg0040:$6c];
end;
 
const
   CrtP = $3d4;    { Базовый номер порта контроллера ЭЛТ }
 
Procedure SetVgaReg(P:word;New_V,Mask,Number:byte);
{Устанавливает один из регистров VGA:
P      - Базовый адрес регистра
New_v  - новое значение,которое нужно записать в регистр,
Mask   - маска,
Number - индекс регистра}
Begin
   Inline($0FA);{ Cli - запрещает прерывания}
   Port[P] := Number;
   Port[P+1] := (Port[P+1] and (not Mask))or (New_V and Mask);
   Inline($0FB);{ Sti - разрешает прерывания}
End;
 
var
  b : byte;
  l : longint;
begin
  for b := 1 to 24 do writeln('Строка текста номер ',b);
  write('Строка текста номер 25');
  repeat
    l := clock;
    for b := 0 to 15 do begin
      while clock < l + 1 do; {задержка на 1/18 сек.}
      setvgareg(crtp,b,$1f,8);
      l := clock;
    end;
    for b := 15 downto 0 do begin
      while clock < l + 1 do; {задержка на 1/18 сек.}
      setvgareg(crtp,b,$1f,8);
      l := clock;
    end;
  until keypressed;
  While keypressed do readkey;
end.