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

    {
     Hi..  I am trying to do animation by flipping the two images between
     the video pages, but I keep getting lines at the bottom of my screen,
     and my screen color changes..  What's up here?
     Did you synchronize to the {vertical|horizontal retrace beFore
     flipping? I don't know how to do this, so any helpfull code from you will
     be appreciated. I took this out of my ANIVGA-Unit:

    At the very beginning of your Program, detect the address of the proper port
    (StatusReg is a global Word Variable):
    }

     Asm  {check whether we are running on a monochrome or color monitor}
       MOV DX,3CCh  {ask Output-register:}
       in AL,DX
       TEST AL,1    {is it a color monitor?}
       MOV DX,3D4h
       JNZ @L1      {yes}
       MOV DX,3B4h  {no }
      @L1:          {DX=3B4h/3D4h = CrtAddress-register For monochrome/color}
    { MOV CrtAddress,DX  not needed For this purpose}
       ADD DX,6     {DX=3BAh/3DAh = Status-register For monochrome/color}
       MOV StatusReg,DX
     end; {of Asm}

    {
    Later on, when you want to switch pages:

       CLI {time critical routine: do not disturb!}
        mov dx,StatusReg
      @WaitnotVSyncLoop:
        in   al,dx
        and  al,8
        jnz  @WaitnotVSyncLoop
      @WaitVSyncLoop:
        in   al,dx
        and  al,8
        jz   @WaitVSyncLoop
    {
        HERE! SWITCH PAGES NOW!!! IMMEDIATELY! do not USE BIOS-inTS or OTHER
        TIME-WASTERS!
    }
       STI
    {
    Well, that's all there is... if you replace the 2 "and al,8" against "and al,1"
    and exchange jnz<->jz, you are syncronizing at the horizontal retrace. But this
    signal is extremely short (at least Compared With the vertical retr.).
    }

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