Hi Everyone.
I'm trying to develop a small graphics driver for the intel chipsets, but I
can't find the necessary information to do that.
Several months ago, I finished a small code that was able to paint pixels onto
the upper part of the screen by setting the screen resolution using VESA VBE in
real mode, switching to protected mode (direct BIOS calls are disabled now),
and writing pixels int the real memory at 0xA0000-0xAFFFF. The problem was that
this zone of the memory is only 64KB in length and some 1024*XXX modes use at
least 2MB of memory, so it could only use the upper screen rows.
This can solved by: a) Getting the VBE protected mode interface (this is not as
easy as it might sound since a change in a kernel entry point could not be a
good idea), b) Creating a Virtual 8086 Monitor and a process in V8086 mode by
changing its copy of EFLAGS bit 17 to 1 at the PCB. c) Returning to real mode
and changing bank from here, then setting the processor in Protected mode. d)
Using framebuffers instead of memory banks, and setting its size and start
point in real mode and e) Writing a device-specific graphic driver and
assembling the code for protected mode. The e) option is the best, because it's
very versatile and you can use it in a OS with an unknown structure without
destroying it (it's independent from the OS).
Since then, I've tried hardly to find the ports that the intel graphics driver
is using. I found info about VirtualBox grapic card (it's open source too) and
made my own driver for it using some basic functions well documented in its
code. For example,
http://www.virtualbox.org/browser/trunk/src/VBox/Devices/Graphics/BIOS/vbe.h
has several defines with the ports used for VESA VBE tasks, the basic command
codes and resolution codes, and a pointer to the framebuffer, and
http://www.virtualbox.org/browser/trunk/src/VBox/Devices/Graphics/BIOS/vbe.c
has the code for setting current video bank, x resolution and y resolution.
With that information, it's easy to write a small driver that simply puts
pixels, but using all the screen (not only the 64 KB frame at 0xA000), and that
is able to change screen resolution. The problem is that this information is
only valid for Bochs/Plex86 virtualized cards (at least, that is what says in
vgabios.c : "This VGA Bios is specific to the plex86/bochs Emulated VGA card.
You can't drive any physical vga card with it."), but it is an important step.
I would like to do the same but for a real graphics controller. ¿Where can I
find the information I need for intel's ones?
I've been looking for it on the xf86-video-intel driver, but over 99% its used
with X Window System or handles 3D or similar, but no info about ports, the
framebuffer (according to intel doc 29065602.pdf, The framebuffer is composed
of Front Buffer or display buffer and Back Buffer or rendering buffer)
_________________________________________________________________
¿Un navegador seguro buscando estás? ¡Protegete ya en www.ayudartepodria.com!
www.ayudartepodria.com
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx