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

    {
    Michael, you wondered how you could scroll an image (320*200) over the
    screen. And yes, as you probably have figured out, the most reliable
    solution to that is mode-x (or tweaked mode or whatever...).
    Here's an example program:

    --------------------------------------------------------->8-------------------
    {

     Mode-x scrolling, by Jens Larsson 2:201/2120.3, Sweden, PD.
     ( btw, hope you know some assembly... <g> )

    }
    {$G+}
    Uses Crt;

       Var i, ScrBase : Word;

        Procedure PutPix(x, y : Word; Color : Byte); Assembler;
          Asm
            mov     ax,0a000h
            mov     es,ax
            mov     bx,x
            mov     dx,3c4h
            mov     ax,0102h
            mov     cl,bl
            and     cl,3
            shl     ah,cl
            out     dx,ax
            mov     ax,y
            shl     ax,4
            mov     di,ax
            shl     ax,2
            add     di,ax
            shr     bx,2
            add     di,bx
            add     di,ScrBase
            mov     al,Color
            mov     es:[di],al
          End;

        Procedure ScrPan(ScrOfs : Word); Assembler;
          Asm
            mov     bx,ScrOfs
            mov     dx,3d4h
            mov     ah,bh
            mov     al,0ch
            out     dx,ax
            mov     ah,bl
            inc     al
            out     dx,ax
          End;

        Procedure SetModeX; Assembler;
          Asm
            mov     ax,0012h
            int     10h
            mov     ax,0013h
            int     10h
            mov     dx,3c4h
            mov     ax,0604h
            out     dx,ax
            mov     dx,3d4h
            mov     ax,0014h
            out     dx,ax
            mov     ax,0e317h
            out     dx,ax
          End;

        Procedure Synk; Assembler;
          Asm
            mov     dx,3dah
    @L1:
            in      al,dx
            test    al,08h
            jne     @L1
    @L2:
            in      al,dx
            test    al,08h
            je      @L2
          End;

           Begin
             Randomize;
             SetModeX;
             ScrBase := 200*80;
             For i := 0 to 9999 do PutPix(Random(320),Random(200),Random(256));
             For i := 0 to 200 do Begin
               ScrPan(i*80);
               Synk;
              End;
             ReadKey;
             Asm; mov ax,0003h; int 10h; End;
           End.

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