Custom resolutions/timings with ATI 5xxx on Windows 7
Done with a ATI 5670, but probably works with all of them + lots of other cards aswell.
Background
My problem is that my display devices needs some specific timings in order to get the picture in the right place (hor/ver placement) and more importantly the right width. That means that the default timings is not always enough. For years I have been using Powerstrip but wanted to upgrade to the new ATI 5xxx card to get bitstreaming for blurays with Arcsoft TMT3. I was a bit surprised to see that not only did ATI not support Powerstrip (or the other way around...), ATI didnt even have any way to change the timings with their own tools (as nVidia does). Doh.
I dumped the 5670 in a corner and bought a nVidia instead to get 8 channel LPCM over HDMI at least. However, the failure with the ATI was more than a bit annoying so I started read up on possible solutions.
Since I am using Windows 7 there is a way of overriding the EDID information (that the display devices responds with to the gfx card which in turn decides which settings the gfx will use to produce the picture). This way is based on creating a .inf file as a driver for the display device and that .inf file will generate som registry entries that will actually override what the display devices is "saying". Note that this also means that if you mess the .inf file up, it is likely you won't get a picture at all so be careful.
Thanks to some guys at AVSforum (in the EDID override thread) that was actually doing this, but for a completely different reason (being able to push audio though the hdmi connection) I got my hands on some good tools for they had been using and developed.
Using the nVidia card and their "custom resolutions" I found porches that pushed my picture to the right and also increased the width. I switch gfx cards and started out on the guide I decided to write:
Steps to take
1) Decide what timings you want.
Either by using a different gfx card that is powerstrip compatible or by reading up on what your display devices likes. I used another gfx card with support for changing the custom timings and tweaked until I got the width, refresh rate and sync width I wanted. I found this thread where "conversion" between different terms is done on Sevenforums.
2) Use a EDID reader to get the current edid.
I used extron edid manager (download http://www.extron.com/download/dltrack.aspx?file=EDID_ManagerV1x0.exe&id=38772). Use "load EDID from registry" and choose the correct display (if you get the choice of more than one). Look for the block and data you want to change. In the "Full View" you can see all the blocks and find the one that is "closest" to what you want. Then go into the detailed view and edit that block, find it either by looking at the block nr and correlate that with the corresponding bits (see http://en.wikipedia.org/wiki/Extended_display_identification_data ) or do like I did, just click on some of the bits in Block 0 until you find "your" block. I was looking for the 1920x1080 48Hz block.
3) Edit the EDID.
Get Vladds Edid Editor (http://www.oshinetworks.com/EDID_Editor.zip) to edit the bits you need and calculate checksums. Note that you enter the data in hex so I used the windows calculator to convert between dec/hex. Note When done editing, save the .bin file and load it up again in EDID manager to see that you got it right. Note that you have to understand how the editing works, sometimes it is not obvious which numbers to change. I verified each change by saving and viewing in the edid manager. For me, the best way was to setup resolution, blanking, porches first and then adjust the refresh rate by changing the ramdac.
In this example 1920 corresponds to 0x780 so you can see that you need to change the 7 in 76 and 80 in 74 (12 bits) to change the Horizontal active pixels. Of course, you cant change it in EDID Manager, but open the .bin file in EDID Editor and find the same blocks there to edit.
4) Create your .inf file
When you got it right, use the string from the edid editor that starts with "; Base EDID ......" and paste that into the .inf file found at http://www.bredbild.se/edid/EDIDOverride.zip (there is one row that looks pretty much like the one you are going to paste into it, replace that one).

5) Change the display driver
Use the .inf as the driver for you Display device (in windows device manager, choose display devices and "update driver" and point to this .inf file). If like me you end up with timings that are not exactly giving you the refreshrate or width/position you are looking for, create a new .inf and just change the driver to the new one and the old entries seems to be overwritten.
6) Reboot
Reboot and it should work (you need to choose the resolution and refreshrate in CCC to the one you just changed) .Use edid manager to read the edid entry in use to see if it does indeed looks like the one you created (in my case it did :) ).
References:
Wikipedia on EDID
Microsoft on how the .inf override works
The EDID override thread avsforum
Entech Powerstrip discussion on ATI 5xxx
Thanks to:
Thanks to SamuriHL on slysoft forum for explaining the benefits of getting the ATI card to run as I need.
Thanks to Vladd on avsforum for creating the excellent EDID Editor
Thanks to Tulli on avsforum for helping me out and pointing towards the tools to use.