[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]