delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2004/09/26/15:30:07

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
Lines: 55
X-Admin: news AT aol DOT com
From: jbs30000 AT aol DOT com (JBS30000)
Newsgroups: comp.os.msdos.djgpp
Date: 26 Sep 2004 19:29:03 GMT
References: <gi3el01sded5u6qe9dpk2vq8lc4hmmg92t AT 4ax DOT com>
Organization: AOL http://www.aol.com
Subject: Re: Strange VESA problem
Message-ID: <20040926152903.25170.00001483@mb-m04.aol.com>
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

>It would help if you posted all the relevant parts of the real code.
I thought I did.  The method I use to get and display the other strings, such
as the OEM Vender Name, and so fourth are the same.  But, if you want more
code...
Here's the struct in its entirety:
struct VBE_VgaInfo
{
        char VESA_Signature[4] __attribute__((packed));
        short VESA_Version __attribute__((packed));
        long OEM_String_PTR __attribute__((packed));
        unsigned long Capabilities __attribute__((packed));
        long Video_Mode_PTR __attribute__((packed));
        short Total_Memory __attribute__((packed));
        //VBE 2.0
        short OEM_Software_Rev  __attribute__((packed));
        long OEM_Vendor_Name_PTR __attribute__((packed));
        long OEM_Product_Name_PTR __attribute__((packed));
        long OEM_Product_Rev_PTR __attribute__((packed));
        char reserved[222] __attribute__((packed));
        char OEM_Data[256] __attribute__((packed));
}vesainfo;

After using functin 0 to get the information and fill the struct, I use these
variables to hold the strings:
char OEM_String[255], OEM_Vendor_Name[256],
             OEM_Product_Name[256], OEM_Product_Rev[256];
And, for the real mode offset I have:
short Real_Mode_PTR
Now, to get the strings, I go:
       Real_Mode_PTR = ((vesainfo.OEM_String_PTR >> 16)  << 4) +
(vesainfo.OEM_String_PTR & 0xFFFF);
        dosmemget(Real_Mode_PTR & 0xFFFF, 255, OEM_String);
       Real_Mode_PTR = ((vesainfo.OEM_Vendor_Name_PTR >> 16) << 4) +
(vesainfo.OEM_Vendor_Name_PTR & 0xFFFF);
        dosmemget(Real_Mode_PTR & 0xFFFF, 256, OEM_Vendor_Name);
        Real_Mode_PTR = ((vesainfo.OEM_Product_Name_PTR >> 16) << 4) +
(vesainfo.OEM_Product_Name_PTR & 0xFFFF);
        dosmemget(Real_Mode_PTR & 0xFFFF, 256, OEM_Product_Name);
        Real_Mode_PTR = ((vesainfo.OEM_Product_Rev_PTR >> 16) << 4) +
(vesainfo.OEM_Product_Rev_PTR & 0xFFFF);
        dosmemget(Real_Mode_PTR & 0xFFFF, 256, OEM_Product_Rev);
        Real_Mode_PTR = ((vesainfo.OEM_Product_Rev_PTR >> 16) << 4) +
(vesainfo.OEM_Product_Rev_PTR & 0xFFFF);
        dosmemget(Real_Mode_PTR & 0xFFFF, 256, OEM_Product_Rev);
And to print them:
printf("Chipset or OEM              %s \n", OEM_String);
        if(vesainfo.VESA_Version >= 0x0200)
        {
                printf("OEM Software Revision No.   %x\n",
vesainfo.OEM_Software_Rev);
                printf("OEM Vendor Name             %s\n", OEM_Vendor_Name);
                printf("OEM Product Name            %s\n", OEM_Product_Name);
                printf("OEM Product Revision No.    %s\n", OEM_Product_Rev);
And there, that's all of the RELEVANT code.  Don't see what good this did, but
anyway, I'll try your changes.  Thanks.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019