home *** CD-ROM | disk | FTP | other *** search
- {
- Here's a demo for a REAL smooth textscroll. Reset lines to something usefull,
- cut the sideborders, place some readable text, and your scroller is ready! ;-)
-
- }
- program smoothtextscroll;
- { by Bas van Gaalen and Sven van Heel, Holland, PD }
- uses crt;
- const vidseg:word=$b800; lines=23;
- var ofs:byte;
-
- procedure vertrace; assembler; asm
- mov dx,03dah; @vert1: in al,dx; test al,8; jnz @vert1
- @vert2: in al,dx; test al,8; jz @vert2; end;
-
- procedure setaddress(ad:word); assembler; asm
- mov dx,3d4h; mov al,0ch; mov ah,[byte(ad)+1]; out dx,ax
- mov al,0dh; mov ah,[byte(ad)]; out dx,ax; end;
-
- procedure setsmooth(smt:byte); assembler; asm
- mov dx,03c0h; mov al,13h+32; out dx,al; inc dx; in al,dx
- and al,11110000b; mov ah,smt; or al,ah; dec dx; out dx,al; end;
-
- procedure setup(ad:word); assembler;
- asm
- mov dx,3d4h
- mov al,18h
- mov ah,[byte(ad)]
- out dx,ax
- mov al,7
- out dx,al
- inc dx
- in al,dx
- dec dx
- mov ah,[byte(ad)+1]
- and ah,00000001b
- shl ah,4
- and al,11101111b
- or al,ah
- mov ah,al
- mov al,7
- out dx,ax
-
- mov al,9
- out dx,al
- inc dx
- in al,dx
- dec dx
- mov ah,[byte(ad)+1]
- and ah,00000010b
- shl ah,5
- and al,10111111b
- or al,ah
- mov ah,al
- mov al,9
- out dx,ax
-
- mov dx,03c0h
- mov al,10h+32
- out dx,al
- inc dx
- in al,dx
- and al,11011111b
- or al,00100000b
- dec dx
- out dx,al
- end;
-
- var x,y,i:word; cx:byte;
- begin
- setup(lines*16);
- setaddress((25-lines)*80);
- gotoxy(1,1);
- writeln('Hey, a smooth textscroll...');
- x:=0; cx:=0;
- randomize;
- repeat
- vertrace;
- setsmooth(x); ofs:=ofs mod 4;
- x:=(1+x) mod 9; if x=0 then begin
- for y:=0 to lines-1 do begin
- move(mem[$b800:160*(25-lines+y)+4],mem[$b800:160*(25-lines+y)+2],158);
- mem[$b800:(25-lines+y)*160+158]:=random(26)+32;
- end;
- end;
- until keypressed;
- textmode(lastmode);
- end.