87 lines
3.5 KiB
Plaintext
87 lines
3.5 KiB
Plaintext
|
|
______ ____ ______ _____ ______
|
|
| ____| | _ \| ____| / / _ \| ____|
|
|
| |__ _ __ ___ ___| |_) | |__ / / |_| | |__
|
|
| __| '__/ _ \/ _ \ _ <| __| / /| _ | __|
|
|
| | | | | __/ __/ |_) | |____ / / | | | | |
|
|
|_| |_| \___|\___|____/|______/_/ |_| |_|_|
|
|
|
|
|
|
Stub driver implementation notes.
|
|
|
|
|
|
|
|
This is an example driver implementation, intended as a starting point
|
|
for anyone who wants to make a real driver for a specific card. It
|
|
provides all the essential VBE/AF functions, but it runs on top of your
|
|
existing VESA driver, using VESA calls to set the video mode and then
|
|
simple software drawing functions to emulate the hardware accelerated
|
|
operations. As such it is not useful in any practical way, but it does
|
|
work: just copy the vbeaf.drv file to c:\ and you should be able to use
|
|
it from any Allegro programs, or the SciTech VBETEST utility (run
|
|
"vbetest -f" to use VBE/AF rather than regular VESA).
|
|
|
|
This driver is not portable, because it uses DPMI calls to communicate
|
|
with VESA. This is no problem as long as it is being used with Allegro,
|
|
but the binary will not work on any other platforms until you have
|
|
removed all the VESA calls and are using direct hardware access for
|
|
everything.
|
|
|
|
This driver provides "accelerated" (emulated in software, and painfully
|
|
slow, but they look like hardware functions to the calling program),
|
|
versions of the VBE/AF routines:
|
|
|
|
WaitTillIdle()
|
|
SetMix()
|
|
Set8x8MonoPattern()
|
|
Set8x8ColorPattern()
|
|
Use8x8ColorPattern()
|
|
DrawScan()
|
|
DrawPattScan()
|
|
DrawColorPattScan()
|
|
DrawRect()
|
|
DrawPattRect()
|
|
DrawColorPattRect()
|
|
DrawLine()
|
|
DrawTrap()
|
|
PutMonoImage()
|
|
BitBlt()
|
|
BitBltSys()
|
|
SrcTransBlt()
|
|
SrcTransBltSys()
|
|
|
|
If you don't want to support all these in your driver, they should be
|
|
replaced with NULL pointers so the caller will know to use their normal
|
|
drawing code instead. VBE/AF provides many more routines than these, but
|
|
Allegro only uses the ones from that list, so it would be rather futile
|
|
to implement any others.
|
|
|
|
This driver supports the FreeBE/AF extension mechanism for enabling true
|
|
protected mode access to video memory. Uncomment the definition of
|
|
NO_HWPTR at the top of driver.c if you want to return to the standard
|
|
nearptr memory access.
|
|
|
|
If you comment out the definition of USE_ACCEL at the top of driver.c,
|
|
the emulated acceleration routines will be removed, leaving only a dumb
|
|
framebuffer driver. This may be useful to see what is the bare minimum of
|
|
functions that you need to include in a VBE/AF driver.
|
|
|
|
This driver implements the FreeBE/AF FAF_CFG_FEATURES extension
|
|
mechanism, which allows the installation program to selectively disable
|
|
some of the hardware accelerated drawing routines. Comment out the
|
|
definition of USE_FEATURES at the top of driver.c if you want to remove
|
|
this capability.
|
|
|
|
There is no support for hardware cursors, 8 bit DAC modes, or the refresh
|
|
rate control functions.
|
|
|
|
The VESA implementation assumes a single 64k memory bank, so it will not
|
|
function correctly on cards with dual banks or other granularities. This
|
|
won't be a problem for the real drivers, though, because you will know
|
|
the granularity in advance. VBE/AF only allows 4k or 64k, so other sizes
|
|
must be scaled up to 64k units.
|
|
|
|
|
|
By Shawn Hargreaves
|
|
shawn@talula.demon.co.uk
|