Intel Widescreen Drivers
Native Resolution Support for External Widescreen Displays on Intel Based Laptops
The information within this article is relevant only to users of laptops or PC’s containing the following chipsets by Intel, using the built in Intel display drivers*: Q963/Q965, 945G, 945GM, 915GV, 915GM, 855GME, 852GM/GME, 845GV (newer versions of the software we’ll use to create this may support additional chipsets)
You probably already know this, but on the off-chance you don’t, you can figure out what chipset your laptop uses by going to Control Panel > System > Device Manager. You should specifically look under “Display Adapters”. In my case our laptop is a Dell Latitude D400 running Windows XP SP2 and uses the 82852/82855 GM/GME. In display adapters it shows 2 instances of ‘Intel Corporation 82852/82855 GM/GME Graphics Controller’. The last 3 digits of each number in this name correspond to the list of supported chips.
What we’re going to do here is create a custom display driver. While I found a lot of the stuff proposed in various places on the net, such as hex editing etc ad nauseum, rather over my head - as someone who is at least comfortable messing with software and hardware in general, I was still able to grasp writing a custom driver - which technically isn’t full on coding, at least in this case. It’s more like following a wizard, really. So if you are the least bit technically inclined I believe you should be able to do the same. But if you are desperate for a quick fix, you can try my experimental driver below at your own peril. It’s experimental in that while it definitely worked for me, every system is different and these are very picky drivers, they haven’t gone through extensive testing like the normal drivers you’re used to.
Scenario: You bought a shiny new widescreen display for use with your laptop, only to discover to your horror that the display’s native resolution didn’t work. You tried just about EVERY so-called “trick” to get your display drivers to list the resolution in Display Properties. Hacked INF files. Edited the registry. Messed with hex code. Installed Powerstrip. Tried to hack the EDID. Considered rewriting the VBIOS. Considered reinstalling Windows. If ANY of this sounds familiar to you, and you’re still at square one, don’t worry. Or maybe you haven’t tried any of it yet. Be thankful if you haven’t. Although Powerstrip is certainly a useful tool to have if your drivers are up to snuff. Chances are though that they aren’t, and no amount of hacking INF or registry entries is gonna make them do something they weren’t programmed to do. I learned this the hard way, and now I’m going to tell you the right way - at least as of the time of writing of this article, until Intel gets off their arses and writes proper drivers with widescreen support for these chipsets, which probably isn’t going to happen. You may have been convinced by your experiences or even some tech support type person that what you’re trying to accomplish just isn’t possible - that you’ll have to either return the screen, or live with a blurry interpolated & stretched image. I make no guarantees, warranties etc. that any of the information or files I offer will work for you, and I accept no legal responsibility for any loss of data or any other kind of damage you might possibly do by following my advice. But having said that, if you want 1680×1050 (or any number of other widescreen/nonstandard resolutions) on your laptop, I’m here to tell you that it is possible to write your own driver using what is called the Intel Embedded Graphics Drivers. What this means is that we must be prepared to get our hands a little bit dirty - however if a few of us do the work and share it with others, it could eventually lead to an extensive list of new widescreen drivers. It seems to me from what I’ve been reading that a lot of people don’t grasp exactly how the Intel Embedded Driver architecture works. To be honest I haven’t used the older versions - and I am aware of them possibly having limitations not to mention being more complicated to figure out, but it appears that most of these issues have been addressed as of the newest version - for example they now offer D3D support so you should be able to run games. Anyway, the embedded drivers are not just something you download and install like any other set of drivers - that’s certainly part of it but when you download the IEGD, at least as of 6.1 here’s how it works:
The IEGD (Intel Embedded Graphic Drivers) authoring environment is installed to a folder called IEGD/IEGD_6_1_Gold. Within this folder is an executable called iegd-ced.exe or the IEGD Configuration Editor. This is where we are going to create our OWN custom drivers specific to our system and our needs. I should note that this is not really what these drivers were intended for, they’re meant for developers primarily, but if they do the same job then so what. There are several steps to the process, especially if you wish to have the flexibility of multiple screen configurations, which I just about guarantee you are. If possible, I recommend installing the IEGD on a second machine, and using this as your “developer’s environment” so if you manage to screw something up it won’t slow things down too much - ie you won’t need to reboot as much
- I created my drivers on my main machine, and shared them over our local network to the laptop. Download the IEGD with CED here:
http://downloadcenter.intel.com/detail_desc.aspx?agr=Y&ProductID=2159&DwnldID=12300&lang=eng
The steps involved are.. 1. Get the EDID / MODELINE data from the monitor
Before you do anything in the CED you’re going to need the custom timing info of the screen you wish to add. Since you’re doing all this in thefirst place, this probably means that for some reason your system is incapable of reading the EEPROM/EDID of your monitor, or it’s broken/corrupted, or it doesn’t have one period. In my case our Dell Latitude D400 with XP SP2 OEM could not read the EDID from our brand new Acer AL2216W, a 22″ widescreen with a native resolution of 1680×1050. The timing info can still be retrieved any number of ways, the easiest of which is to obtain the monitor driver - ours didn’t come with one so I had to download it from Acer. By reading the INF I found the MODELINE string, and using a tutorial from one of the kind chaps out there on the net named “Archibael”, I was able to convert the string into the values required to create a custom DTD or timing, using the IEGD Configuration Editor. Unfortunately the tutorial is a little lengthy and at times misleading for the purpose of using the IEGD, so I will give the relevant corrected instructions in a moment. A link to the other tutorial may be found at the bottom of this page, for reference purposes only. Another way to get the EDID info is to plug the monitor into another machine and use moninfo or some other utility, but I suspect that it won’t always be as simple as that and you will need the monitor driver just to get that to work anyway. If you’re lucky you might even find the settings (sync offset, blank width etc) in an already useable format so if you do you can skip much of part 2 - at least read about the pixel clock because this will remain important.
2. Convert the MODELINE (you’ll need to know some simple math, and what number means what - that’s it!)
Example modeline:“1280×1024″ 108.000 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync
Ignore the quoted part, cause it just tells you what resolution the next numbers define.
108.00 - Pixel Clock in megahertz. We need kilohertz, so move the decimal place 3 to the right (technically we don’t add a decimal at all since the DTD requires a whole integer) - 108000
1280 is horizontal active area, obviously the “1280″ in “1280×1024″.
1328 is the start of the sync pulse, 1440 is the end of the sync pulse.
1688 is the end of the blanking interval (read the reference tutorial if you need more detailed explanations)
1024 is vertical active area, and the next numbers relate to this the same way as the numbers which precede the horizontal active area.
+hsync and +vsync are the polarities. +hsync for example would correspond with “Horizontal Sync Polarity: Active High”. Make sense?
Now the formulas, in the order of the fields in the DTD Editor:
Horizontal or Vertical Sync Offset: Start of Sync pulse minus active area (1328-1280 in our example, or 1025-1024)
Horizontal or Vertical Sync Pulse Width: End of Sync pulse minus Start of Sync pulse (1440-1328 or 1028-1025)
Horizontal or Vertical Blank Width: End of blanking interval minus Active Area (1688-1280 or 1066-1024)
3 very simple formulas that will give you all the numbers for both H & V!
3. Create a new Display Timing Descriptor (DTD) with the CED Now that we have the values we can begin the main part of the process. In the IEGD CED, go to “New DTD”. Fill in the values & name the file whatever you want. This will need to be repeated for each custom timing / resolution / display you want to use. When we do the next step “Creating a Configuration in the CED” we will be essentially forcing the driver to look for these DTD’s and use them, overriding what is defined in the VBIOS.This is why hacking INFs (ascii files which contain descriptions of the files and registry entries for the drivers) fails.. the DTD definitions may be there, but they’re worthless if the driver itself (a set of compiled, non editable binary files) isn’t looking for them in the first place - which most standard Intel drivers are NOT. You may have heard that “Intel’s latest drivers support it blah blah blah” but I’ve tried it and several other revisions, and NONE of them contain anything in the INF or registry entries to indicate they support this kind of hacking. The driver we’re creating will contain hard coded instructions to create these timings.. they WILL be added to Windows Display Properties, it’s just a question of you doing it right. When I followed the original tutorial it claimed that “The DTD first expects the pixel clock in units of 10kHz. 108.00 MHz = 10800 kHz, so that’s easy enough.” While I question the accuracy of this statement, maybe it worked for him using this convoluted INF hacking method, but it’s so hit-and-miss from what I’ve seen I absolutely don’t even recommend attempting it. When creating a custom DTD in the IEGD CED, you are going to need to enter numbers in a very specific format or it will NOT work. The pixel clock is perhaps the most likely to be prone to errors, with information like the above out there, and the fact that you will usually find the pixel clock defined in MHz, not kHz. The CED requires the number in kHz. Not MHz, not “10’s of kHz”. If you followed the calculation above you would end up with a screen trying to display at a value between 6-10hz, instead of 60-100hz! This would give you a black screen, in fact the signal probably wouldn’t even register on your monitor. 1 kilohertz = 1000 hz. 1 megahertz = 1000 kHz.
4. Create a Configuration in the CED
Now we must create a new Configuration. We will probably need to create a few of them in fact, for that flexibility I mentioned earlier - but for the sake of simplicity let’s create a Dual Independent Head configuration - assuming your chipset supports it. If it doesn’t, it might be worth making the gamble and going with a Single display configuration. Just be aware that if you screw something up here you’re more likely to have to go into Safe Mode to undo it. Choose a configuration file name, and select the Chipset corresponding to your own. Leave Display Detection as “Disable”.We are going to need to choose what devices to make available to us. The various Port Devices run the gamut of pretty much anything you will want to attach from CRT’s to TV’s and Flat Panel displays. For the sake of simplicity let’s assume that your situation is like mine and you have an internal laptop display and an external VGA device that you need to drive.
In such a case we would need to make 2 ports available: LVDS, and CRT in that order. LVDS being the laptop’s internal display and CRT being the VGA device. A flat panel widescreen display isn’t exactly a CRT, but that doesn’t matter. What matters is that the driver knows where to send the signal to, cause if not, when Windows boots you’ll see a whole lot of nothing on your screen. And I don’t need to tell you that’s not good.
Hit Next > and you will need to enter a Readable Port Name (this may need to be something specific but not being an expert just yet, I wrote some arbitrary name, and the driver works so - no complaints..) You must also check both instances of “Use user defined DTDs” so that the driver is FORCED to add new resolutions. Also check the boxes next to the DTD’s you want included, inside “Custom Display Timing Descriptors”. Hit Next > and repeat this process for each Port/Device, then click Finish. The final page is VBIOS related stuff which is not relevant to creating a Windows XP driver.
5. Create a Package in the CED
We’ve found our EDID’s, we’ve created our DTD’s, we’ve created our Configurations. Now we must create a package to contain it all. In the main window hit “New Package”. Name it, check the configurations to include, and which one should be default. I recommend whichever one corresponds best to what device you plan to have connected when you install the driver and run it the first time. Target OS should be Microsoft Windows 2000/XP/XPe, although you can certainly use this method for other operating systems on the list. You can’t create a custom Video BIOS without DOS, and I really wouldn’t recommend it anyway because this is a good way to completely screw up your system if you don’t know what you’re doing.Leave Display Modes checked as Use Default. Finish.
6. Create an installation (CED) and install it!
Next, create an installation and name it. You now have custom drivers! You will find them inside the workspace/installation folder in IEGD_6_1_Gold. Move the zip file to your target machine if applicable, and unzip the contents to a temp folder. Find the driver folder. Go to Device Manager in Windows Control Panel and update each Display Adapter driver, making sure you choose the “don’t search automatically” and “Have Disk..” options. One extra step that may be worth your while is to open the ssigd.inf inside the driver folder and find the alias corresponding to your chipset. Name it something unique like “855 GM/GME Graphics Adapter (Widescreen Support)” to make it easy to tell apart from other driver versions. If you make multiple versions of the driver then name each one something different. It is possible your first attempt won’t be fully successful so maybe name them as “Test Version” etc until you’re satisfied that the next version will be the real deal. Finally, reboot your machine only when each Display Adapter device driver has been updated (laptops often have more than one instance depending on the chipset..) If everything goes according to plan, when you boot up Windows should load a “safe” default res such as 1024×768 HOWEVER, when you go into Display Properties and select the external display, a plethora of new resolutions should be available - strangely enough including many that you didn’t even define DTD’s for. Now choose your custom res, and hit Apply - Native resolution, finally!
Footnotes/External Links:
IEGD 6.1 (A newer version may be available which requires slightly different instructions, but don’t fret - it’s probably even easier now):
http://downloadcenter.intel.com/detail_desc.aspx?agr=Y&ProductID=2159&DwnldID=12300&lang=eng
Archibael’s original tutorial:
http://shareit.intel.com/WikiHome/Articles/111111431
Henrik’s 82855 GM/GME driver with 1680×1050 support:
http://www.voxhouse.net/2008/04/20/intel-onboard-widescreen-graphics-driver-download/

