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

    {Tested under BP7.01 in Win'95, protected mode target: }

    program VesaInfo;
    uses DPMI,WinAPI,WinDOS;

    procedure GetVESAInfo;
    type
      PVESAInfo = ^TVESAInfo;
      TVESAInfo = array [0..511] of byte;
    var
      i:         byte;
      SegAndSel: longint;
      VESAInfo:  PVESAInfo;
      Regs:      TRealModeRegs;

    begin
      SegAndSel:=GlobalDOSAlloc(SizeOf(TVESAInfo));
      if SegAndSel=0 then writeln('Can''t allocate DOS memory for VESA Info.')
      else begin
        VESAInfo:=Ptr(LoWord(SegAndSel),0);
        FillChar(Regs,SizeOf(Regs),#0);
        Regs.AX:=$4F00;
        Regs.ES:=HiWord(SegAndSel);
        { Regs.DI:=0; - done already by FillChar }
        RealModeInt($10,Regs);
        if Regs.AX=$4F then begin
          for i:=0 to 3 do write(Char(VesaInfo^[i]));
          write(' v.',VesaInfo^[5]:1,'.');
          if VesaInfo^[4]<10 then write('0');
          writeln(VesaInfo^[4]:1);
          { process VESAInfo here }
        end else begin
          write('Can''t load VESA information: ');
          if Regs.AL<>$4F then writeln('VESA BIOS not loaded.')
          else case Regs.AH of
            1: writeln('VESA BIOS call failed.');
            2: writeln('function not supported by hardware configuration.');
            3: writeln('function invalid in current video mode.');
            else writeln('unknown VESA BIOS error.');
          end;
        end;
        GlobalDOSFree(LoWord(SegAndSel));
      end;
    end;

    begin
      GetVESAInfo;
    end.

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