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

    {
    JOHN BECK

    > question me is that when I'm using the BIOS block palette
    > to create a fade in/out, it makes the screen flicker, which
    > is quite disturbing.  What Info I need is how the VGA port
    > works on setting up the RGB palette.  Thanks.
    }

    Type
      colorType  = Record
        rvalue,
        gvalue,
        bvalue : Byte;
      end;

      paletteType = Array [0..255] of colorType;

    Procedure setpal(Var tp : paletteType);
    Var
      palseg,
      palofs : Word;

    Label wait1 {,wait2};

    begin
      palseg := seg(tp);
      palofs := ofs(tp);
      Asm
        mov  dx, $3DA

       wait1:
        in   al, dx
        test al, $08
        jz   wait1

     { wait2:
        in   al,dx
        test al,$08
        jnz  wait2 }

        mov ax, 1012h
        xor bx, bx
        mov cx, 256
        mov es, palseg
        mov dx, palofs
        int 10h
      end;
    end;

    Procedure readpal(Var tp : paletteType);
    Var
      palseg,
      palofs : Word;
    begin
      palseg := seg(tp);
      palofs := ofs(tp);
      Asm
        mov ax, 1017h
        xor bx, bx
        mov cx, 256
        mov es, palseg
        mov dx, palofs
        int 10h
      end;
    end;

    {
       I cheat a little bit in the way that the screen flickering is handled,
    but I find that this way is faster For many animations+palette manipulations /
    second While still eliminating screen flickering.  Normally there would be
    two tests for retrace, a 'jz' and a 'jnz', instead this only performs the
    'jz' test. if your monitor still flickers, uncomment the other code.
    }

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