[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]