Hi,
cb88 wrote:Well since you mentioned the voodoo one I was looking for documentation... is there any besides the open source drivers for it? I found alot of historical information but thats about it. Probably just looking in the wrong places.
I did a little searching and found links to
the specs for several versions of "3dfx voodoo" video cards.
I've also got a book called
Programmer's Guide to the EGA, VGA, and Super VGA Cards, which is a large and badly structured book, that contains a lot of information for old video cards.
I'd recommend gathering as many video card specs as you can (e.g. old stuff, Intel and ATI) and browsing through them. Then looking at the features supported by these cards and modern graphics APIs (OpenGL, DirectX) to determine what features you expect an OS's native video driver to support. Once you've researched, designed and documented the native video driver API for your OS; implement a "framebuffer" driver with software rendering, and develop some test applications (possibly including GUI/window management, page layout code, widgets, etc).
After that, I'd start with a "dual video card" system. The idea is that you'd use your existing/working "framebuffer" driver on the first video card to see what you're doing while you experiment with the driver for the second video card. For example, you might start with a dummy driver (with little more than a "get/set register" interface) and an application that uses the dummy driver to let you view the second video card's registers and modify them manually. Then you'd use your application/tool to figure out how to set video modes, and debug the driver's code when setting a video mode goes wrong; and then keep using the application/tool to figure out 2D acceleration, etc.
If you try to develop a video driver on a "single video card" system, then you will be working blind; and there's also a greater risk of making mistakes/assumptions that prevent the video driver from working correctly when the video card isn't the first/primary video card (e.g. inadequate initialisation code that "works" when the card is the first/primary card because you were lucky and the firmware happened to leave something initialised).
Cheers,
Brendan