blackmirror, конкретно на этом паскале вот:
Код:
procedure DrawLine;
begin
  dx:=0;
  if (x1-x2)<$8000 then dx:=x1-x2;
  if (x2-x1)<$8000 then dx:=x2-x1;
  dy:=0;
  if (y1-y2)<$8000 then dy:=y1-y2;
  if (y2-y1)<$8000 then dy:=y2-y1;

  if (x2-x1)<$8000 then dx1:=1 else dx1:=$FFFF;
  if (y2-y1)<$8000 then dy1:=1 else dy1:=$FFFF;

  if dx>dy then begin
    y:=dx / 2;
    for i:=dx downto 0 do begin
      asm(PUTPIXELA);
      y:=y+dy;
      if y>dx then begin
        y1:=y1+dy1;
        y:=y-dx;
      end;
      x1:=x1+dx1;
    end;
  end else begin
    y:=dy / 2;
    for i:=dy downto 0 do begin
      asm(PUTPIXELA);
      y:=y+dx;
      if y>dy then begin
        x1:=x1+dx1;
        y:=y-dy;
      end;
      y1:=y1+dy1;
    end;
  end;
end;
От привычного паскаля отличается тем, что в функции и процедуры параметры не передаются (надеюсь, что только пока не передаются) и для этого используются глобальные переменные X1,Y1,X2,Y2. Процедура адаптирована на использование целочисленных переменных с разрядностью 16 бит, хотя, наверное хватит и 8 бит, если координаты не превышают 0-255. Позже попробую.
Процедура точки PUTPIXELA на асме, берёт координаты из переменных X1 и Y1.