function sign(a:single):integer;
begin
   if a = 0 then
      sign := 0
   else
      if a > 0 then
         sign := 1
      else
         sign := -1;
end;

begin
   GetPal(p[0],0,256);
   FadeOut(p);
   CreateSprite(?sprt01.bmp?,0,0,1,1);
   r.ax := $13;  { устанавливаем режим }
   intr($10,r);  { 320х200х256 цветов }
   scr := ptr(SegA000,0);
   BlackPal;
   PutBackGround;      {рисуем фон}
   FadeIn(p);
   GetBuffer;  {сохраняем фон под спрайтом}
   PutSprite;  {и рисуем на его месте спрайт}
   repeat   {теперь спрайт будет двигаться по экрану}
           {до тех пор, пока мы не нажмем на клавишу}
      PutBuffer;    {восстанавливаем фон}
      FPS := GetFPS;
      if FPS > 1 then begin     {изменяем приращение}
         Sprt.dx := sign(Sprt.dx)*round(70/FPS);
         Sprt.dy := sign(Sprt.dy)*round(70/FPS);
      end;
      CalcSpritePosition;
      GetBuffer;    {сохраняем фон}
      PutSprite;    {рисуем спрайт}
      inc(TextColor);
      SetTextParm(TextColor div 16,
                           (TextColor + 48) div 16,1);
      PutText(56,16,?Демонстрационная?);
      SetTextParm(TextColor and $F,0,0);
      PutText(192,16,?программа?);
      SetTextParm(1,14,1);
      str(Clock:3,s);
      PutText(128,172,?Time:?+s);
      SetTextParm(15,0,1);
      str(FPS:0:1,s);
      PutText(120,184,? ?+s+? fps ?);
      delay(100);   {для регулирования частоты кадров}
      WaitVerticalRetrace;
        {ожидаем обратный ход луча кадровой развертки}
   until keypressed;
   readkey;                  {чистим буфер клавиатуры}
   FadeOut(p);
   r.ax := $3;
   intr($10,r);       {возвращаемся в текстовый режим}
   DestroySprite;
end.
405