Mail Archives: djgpp/1999/01/02/15:59:49
Thanks a lot for the info, I've been looking around at it for a while.
Anyway, is there a small VASA library around? VBE 1 or 2 is good. Thanks
a lot. I just want some basic functions, even if just a putpixel I can
do the rest.
Thanks a lot.
-- Alex
George Foot wrote:
>
> On 2 Jan 99 at 1:38, Alex Lowe wrote:
>
> > Hello all,
> >
> > I am searching for a SMALL (ironically in big letters) graphics library.
> > The smaller the better, just a few graphics modes (at least 640x480x16
> > colors) and a putpixel... A Vesa library is nice, if it is SMALL, I
> > don't want to make a VESA library.news://news.2xtreme.net/comp.os.msdos.djgpp
>
> Not many libraries support 16 colour modes.
>
> > Or... (even better, and preferred)
> >
> > a description on how to plot pixels directly to memory in VGA mode 0x12
> > (640x480x16color). The memory doesn't seem to be linear at 0xA000. I
> > just need the memory scheme so that I can properly plot pixels directly
> > to memory, the bios putpixel is wwwaaayyyy too slow, obviously.
>
> The memory is arranged as four planes. Each plane is like a
> monochrome bitmap. One plane holds the red components, one the
> greens, one the blues and one the intensity. To do any useful
> writes you need to write not only to memory but also to the
> card's registers -- they determine which plane is written to,
> for example. While the memory layout is pretty simple,
> deciding how to do the write is not.
>
> There are three or four (depends whether you have EGA or VGA)
> `write modes'. The most useful ones for general writing are
> modes 0 and 2. In write mode 0, you set some of the registers
> to choose which plane(s) you want to write to, then write the
> new value to wherever you want to write. Most of the time you
> need to perform a read before each write, to set the latch
> registers. The value you write is the bitmask; it is entered
> into that memory location in each plane you marked. There is
> another way to use this write mode; you can set one register to
> say which planes you want to affect, and set another register
> to say whether affected bits in those planes should be set or
> cleared. Then you write a bitmask as normal. The effect is to
> set a number of pixels to a certian colour (if the plane mask
> is set to 15).
>
> In write mode 2, the CPU data is the colour to write, and you
> set the bitmask through a register. Bit 0 of the CPU data goes
> to plane 0 (blue), bit 1 to plane 1 (green), etc. In many
> cases this mode is more intuitive to use, but it can be slower
> because only 4 bits of CPU data are used (in write mode 0 all
> eight bits are relevant).
>
> Writing efficient code to use 16 colour modes can be a fairly
> tedious process. You have to consider which write mode to use,
> trying to reduce the number of register writes to a minimum.
> In the summer I wrote a 16 colour EGA/VGA driver for Allegro,
> for the 640 pixel wide modes, but that wouldn't be much use to
> you since you don't want to use Allegro.
>
> If you want to find out more about this you really need some
> documentation. Download the VGADOC package (linked from
> http://www.talula.demon.co.uk/freebe/) and look at egaregs.txt
> and vgaregs.txt. That's fairly minimal information but should
> be enough to get you started. I also have complete specs for
> the ET4000, which includes more verbose descriptions of the VGA
> registers, and an old book on EGA/VGA graphics programming.
> Finding books on this these days is not easy. If you need any
> further help, or want me to write you a few examples, just let
> me know.
>
> --
> george DOT foot AT merton DOT oxford DOT ac DOT uk
- Raw text -