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

{
EDWIN CALIMBO

³Can anyone supply me With a routine to determine a Graphics card? I want
³the Procedure to return a Variable if the user has a Graphics card less
³than an EGA. Anyone have anything quick?

The Function below will detect most Graphics (mono/color) card. It's
a bit long, but is has all the info on how to detect certain card.
}

Uses
  Dos;

Type
  CardType = (none,mda,cga,egamono,egacolor,
              vgamono,vgacolor,mcgamono,mcgacolor);

Function VideoCard: CardType;
Var
  code : Byte;
  Regs : Registers;
begin
  Regs.AH := $1A;      (* call VGA Identify Adapter Function *)
  Regs.AL := $00;      (* clear AL to 0...*)
  Intr($10, Regs);     (* call BIOS *)
  If Regs.AL = $1A then
  begin
    Case Regs.BL of
      $00 : VideoCard := NONE;       (* no Graphic card *)
      $01 : VideoCard := MDA;        (* monochrome *)
      $02 : VideoCard := CGA;        (* cga *)
      $04 : VideoCard := EGAColor;   (* ega color *)
      $05 : VideoCard := EGAMono;    (* ega mono*)
      $07 : VideoCard := VGAMono;    (* vga mono *)
      $08 : VideoCard := VGAColor;   (* vga color *)
      $0A,
      $0C : VideoCard := MCGAColor;  (* mcga color *)
      $0B : VideoCard := MCGAMono;   (* mcga mono *)
      Else
        VideoCard := CGA
    end
  end
  Else
  begin
    Regs.AH := $12;         (* use another Function service *)
    Regs.BX := $10;         (* BL = $10 means return EGA info *)
    Intr($10, Regs);        (* call BIOS video Function *)
    If Regs.bx <> $10 Then  (* bx unchanged means EGA is not present *)
    begin
      Regs.AH := $12;
      Regs.BL := $10;
      Intr($10, Regs);
      If Regs.BH = 0 Then
        VideoCard := EGAColor
      Else
        VideoCard := EGAMono
    end
    Else
    begin
      Intr($11, Regs);     (* eguipment determination service *)
      code := (Regs.AL and $30) shr 4;
      If (code = 3) Then
        VideoCard := MDA
      Else
        VideoCard := CGA
    end
  end
end; (* VideoCard *)

(*============================= cut here ==================================*)

begin
  Case VideoCard of
    VGAColor : Writeln('VGA Color');
  end;
end.

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