Как программировать спрайты?

Пример простейшей программы рисования спрайтов:

uses dos,crt;
{$I HUMAN.INC}
type
    sr=array[1..10,1..10] of byte;
var
   mas:sr;
   i,j,n,k:integer;
   r:registers;
 
procedure pixel(x,y,c:integer);
begin
   mem[$a000:(y shl 8 + y shl 6 + x)]:=c;
end;
 
procedure spr(spri:sr);
begin
 for i:=1 to 10 do
   for j:=1 to 10 do
   begin
      if spri[i,j]=1 then pixel(i,j,15)
      else pixel(i,j,0);
   end;
end;
 
procedure initgrp; assembler;
asm
   mov ax,13h
   int 10h
end;
 
begin
   initgrp;
   n:=400;
   k:=1;
   repeat
      for i:=1 to 10 do
         for j:=1 to 10 do
            begin
               if dv1[j,i]=1 then pixel(i+k,j,15)
               else pixel(i+k,j,0);
            end;
      delay(n);
      k:=k+1;
      for i:=1 to 10 do
         for j:=1 to 10 do
            begin
               if dv2[j,i]=1 then pixel(i+k,j,15)
               else pixel(i+k,j,0);
            end;
      delay(n);
      k:=k+1;
      for i:=1 to 10 do
         for j:=1 to 10 do
            begin
               if dv3[j,i]=1 then pixel(i+k,j,15)
               else pixel(i+k,j,0);
            end;
      delay(n);
      k:=k+1;
      for i:=1 to 10 do
         for j:=1 to 10 do
            begin
               if dv4[j,i]=1 then pixel(i+k,j,15)
               else pixel(i+k,j,0);
            end;
      delay(n);
      k:=k+1;
      for i:=1 to 10 do
         for j:=1 to 10 do
            begin
               if dv5[j,i]=1 then pixel(i+k,j,15)
               else pixel(i+k,j,0);
            end;
      delay(n);
      k:=k+1;
      for i:=1 to 10 do
         for j:=1 to 10 do
            begin
               if dv6[j,i]=1 then pixel(i+k,j,15)
               else pixel(i+k,j,0);
            end;
      delay(n);
      k:=k+1;
      for i:=1 to 10 do
         for j:=1 to 10 do
            begin
               if dv7[j,i]=1 then pixel(i+k,j,15)
               else pixel(i+k,j,0);
            end;
      delay(n);
      k:=k+1;
      if k=320 then k:=1;
   until keypressed;
end.
 
 
const
     dv1 : array[1..10,1..10] of byte =
     (
     (0,0,0,0,0,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0));
 
 
     dv2 : array[1..10,1..10] of byte =
     (
     (0,0,0,0,0,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,1,1,1,0,0,0,0),
     (0,0,0,1,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,1,1,0,0,0,0,0),
     (0,0,0,1,1,1,0,0,0,0));
 
 
     dv3 : array[1..10,1..10] of byte =
     (
     (0,0,0,0,0,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,1,1,1,0,0,0,0),
     (0,0,1,0,1,0,0,0,0,0),
     (0,0,0,1,1,0,0,0,0,0),
     (0,0,0,1,0,1,0,0,0,0),
     (0,0,1,0,0,1,1,0,0,0),
     (0,0,0,1,1,1,0,0,0,0));
 
 
     dv4 : array[1..10,1..10] of byte =
     (
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,1,1,1,0,1,0,0,0),
     (0,0,1,0,1,1,0,0,0,0),
     (0,0,1,0,1,1,0,0,0,0),
     (0,0,0,1,0,1,0,0,0,0),
     (0,0,1,0,0,1,0,0,0,0),
     (0,1,0,0,0,1,1,0,0,0),
     (0,0,1,0,0,0,0,0,0,0));
 
 
     dv5 : array[1..10,1..10] of byte =
     (
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,1,1,1,0,0,0,0,0),
     (0,0,1,0,1,1,1,0,0,0),
     (0,0,0,1,1,1,0,0,0,0),
     (0,0,0,1,1,0,0,0,0,0),
     (0,1,1,1,1,1,0,0,0,0),
     (0,1,0,0,0,1,0,0,0,0),
     (0,0,0,0,0,1,1,0,0,0));
 
 
     dv6 : array[1..10,1..10] of byte =
     (
     (0,0,0,0,0,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,1,1,1,0,0,0,0),
     (0,0,0,1,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,1,1,1,1,0,0,0,0),
     (0,0,1,0,1,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0));
 
     dv7 : array[1..10,1..10] of byte =
     (
     (0,0,0,0,0,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,1,1,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,0,1,0,0,0,0,0),
     (0,0,0,0,1,1,0,0,0,0),
     (0,0,0,1,1,0,0,0,0,0),
     (0,0,0,1,1,1,0,0,0,0));