[Back to SCROLL SWAG index] [Back to Main SWAG index] [Original]

    unit scroll;

    INTERFACE

    procedure scroff(const soffset:word);
    procedure vfine(const y:byte);
    procedure vait;
    procedure smooth;
    procedure scrpage(const p1,p2:byte);

    IMPLEMENTATION

    procedure scroff(const soffset:word); assembler;
    asm
      mov dx,03dah
    @W1:
      in  al,dx
      test al,8
      jnz @W1
      mov dx,03d4h
      mov bx,soffset
      mov ah,bh
      mov al,00ch
      out dx,ax
      mov ah,bl
      inc al
      out dx,ax
      mov dx,03dah
    @W2:
      in  al,dx
      test al,8
      jnz @W2
    end;

    procedure vfine(const y:byte); assembler;
    asm
      mov dx,03dah
    @W2:
      in  al,dx
      test al,8
      jz  @W2
      mov dx,03d4h
      mov ah,Y
      mov al,8
      out dx,ax
    end;

    procedure vait; assembler;
    asm
      mov cx,1
      mov ax,250
      @@l1:
        @@l2:
        dec ax
        jnz @@l2
      dec cx
      jnz @@l1
    end;

    procedure smooth;
    var a,i:word;
    begin
      for i:=0 to 25 do
      begin
        scroff(i*80);
        for a:=0 to 15 do
        begin
          vfine(a);
          vait;
        end;
      end;
      for i:=25 downto 0 do
      begin
        scroff(i*80);
        for a:=15 downto 0 do
        begin
          vfine(a);
          vait;
        end;
      end;
    end;

    procedure scrpage(const p1,p2:byte);
    var a,i:word;
    begin
      if(p1<p2)then
      begin
        for i:=(p1*25)to(p2*24)do
        begin
          scroff(i*80);
          for a:=0 to 15 do
          begin
            vfine(a);
            vait;
          end;
        end;
      end else
      begin
        for i:=(p1*24)downto (p2*24)do
        begin
          scroff(i*80);
          for a:=15 downto 0 do
          begin
            vfine(a);
            vait;
          end;
        end;
      end;
    end;

    end.

[Back to SCROLL SWAG index] [Back to Main SWAG index] [Original]