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

    {
    From: denthor@goth.vironix.co.za (Grant Smith)

    : I was watching an old demo by iguana called heartquake the other day. In
    : the very beginning, wher the user could make sound card settings, etc.,
    : the was a very smooth vertical text scroll, not char by char, but
    : semmingly scanline by scanline. Anyone got any idea on how this was
    : done?

    Here you go :-) Full source to smooth scroll. For more gfx stuff, check out
    my trainer series : http://goth.vironix.co.za/~denthor
                        ftp.eng.ufl.edu /pub/msdos/demos/code/graph/tutor
                        denthor@beastie.cs.und.ac.za Subject : request-list

    Byeeee...
      - Denthor / Asphyxia
    }

    Uses
      Crt;

    Procedure Soft;
    var i,j,k,old : integer;
    ch : char;
        f:text;
        temp:string;

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

    procedure scroff(soffset:integer);
    assembler;
    asm
     { cli}
      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
     { sti}
    end;

    procedure split(Line:word);
    assembler;
    asm
     mov ax,Line
     shl ax,1
     mov bl,ah
     mov ah,al
     mov bh,bl
     shr bh,1
            mov     cl, 6
     shl bh,cl
     and bl,1
            mov     cl,4
     shl bl,cl
     mov dx,03d4h
     mov al,018h
     out dx,ax
     mov al,7
     out dx,al
     inc dx
     in  al,dx
     and al,0ffh-16
     or  al,bl
     mov ah,al
     mov al,7
     dec dx
     out dx,ax

     mov al,9
     out dx,al

     inc dx
     in  al,dx
     and al,0ffh-64
     or  al,bh
     mov ah,al
     dec dx
     mov al,9
     out dx,ax
    end;

    procedure fasttext(x, y : word; col : byte; what : string);
    assembler;
    asm
          push   ds

          dec    [x]
          dec    [y]
          mov    ax, 0b800h
          mov    es, ax
          mov    ax, [y]
          mov    bl, 160
          mul    bl
          add    ax, [x]
          add    ax, [x]
          mov    di, ax

          lds    si, what
          cld
          lodsb
          xor    ch, ch
          mov    ah, [col]
          mov    cl, al
          cmp    cx, 0
          jz     @@2

     @@1: lodsb
          stosw
          loop   @@1

     @@2:
          pop    ds
    end;

    begin
      textattr := 15;
      clrscr;
      split(192);
      asm
        mov   ah,01
        mov   ch,20h
        int   10h
      end;
      j := 0;
      old := 0;
      j := 2;
      scroff (j*80);
      fasttext (1,1,$1E,'        --==[ Copyright Asphyxia Software, 1994 All Rights Reserved ]==--       ');
      for i := 1 to 24 do BEGIN
        fasttext (1,i+27,$0F,'Denthor / Asphyxia / Coder / +27 31 732129 / denthor@beastie.cs.und.ac.za');
      END;

      for j:=2 to 27 do BEGIN
        scroff((j-1)*80);
        for i := 0 to 15 do
        begin
          vfine (i);
          delay(1);
        end
      END;
      while keypressed do readkey;
      readkey;
      for j:=28 to 52 do BEGIN
        scroff((j-1)*80);
        for i := 0 to 15 do
        begin
          vfine (i);
          delay(1);
        end
      END;
      textmode(co80);
    end;

    begin
      Soft;
    end.

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