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

    {
    I've must say that im not exactly the perfect programmer, but I think I've an
    answer to some of your questions.

    1. Well to post a whole program who does that is quite complicated. But
       if you use the Pelpanning register it's possible to create really fast
       scrollers even on slow 286 and XT's. Here comes a simple proc just to
       get the Idea:

    }

    const Crtadress:word=$3d4;
          Inputstatus:word=$3DA;

    Procedure Pan(X,Y: Word);assembler;    { This pans the screen } asm
        mov    bx,320
        mov    ax,y
        mul    bx
        add    ax,x
        push   ax
        pop    bx
        mov    dx,INPUTSTATUS
    @WaitDE:
        in     al,dx
        test   al,01h
        jnz    @WaitDE       {display enable is active?}
        mov    dx,Crtadress
        mov    al,$0C
        mov    ah,bh

        out    dx,ax
        mov    al,$0D
        mov    ah,bl
        out    dx,ax
        MOV    dx,inputstatus
    @wait:
        in      al,dx
        test    al,8                    {?End Vertical Retrace?}
        jz     @wait
    End;

    {
    If you use this, you should realize that if you increase x by one the screen
    moves four pixels. This procedure move the whole screen, so if you want a logo
    or something at the screen too you have to use this little procedure, it resets
    the scanlines at the screen soo it is only the top of the screen that moves.
    }

    procedure vgasplit(whatline:word);
    begin
      asm
    {VGASplit        Proc    Near}
                     Mov     BX,whatline
                     Mov     DX,3DAh-6           {; Port = 3D4H}
                     Mov     AX,BX
                     Mov     BH,AH
                     Mov     BL,BH
                     And     BX,0201H
                     Mov     CL,4
                     Shl     BX,CL
                     Shl     BH,1
                     Mov     AH,AL
                     Mov     AL,18H
                     Out     DX,AX

                     Mov     AL,7
                     Out     DX,AL

                     Inc     DX
                     In      AL,DX

                     Dec     DX
                     Mov     AH,AL
                     And     AH,11101111B
                     Or      AH,BL
                     Mov     AL,7
                     Out     DX,AX

                     Mov     AL,9
                     Out     DX,AL

                     Inc     DX
                     In      AL,DX

                     Dec     DX
                     Mov     AH,AL
                     And     AH,10111111B
                     Or      AH,BH
                     Mov     AL,9
                     Out     DX,AX

                   End;
    end;

    {
    2. There are several unit's out there that comes with source so i suggest
       that you have another look at one of them, There is a really nice one
       called ANIVGA.

    3. Well its almost the same as the first question. Just dont set the vgasplit
       rutine. And increase the y parameter instead of x.

    All of the rutines have been written for mode X, but it's also possible to use
    them with standard Vgamode $13.
    Thats it. I really hope it helped you or/and somebody else a little bit,if you
    or anyone else have any questions. Please feel free to write me a Letter.

    }

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