NAME
vga_setmode - sets a video mode
SYNOPSIS
#include <vga.h>
int vga_setmode(int mode);
DESCRIPTION
vga_setmode(int mode) selects the video mode given and clears the
screen (if it was a graphics mode). Basically this should be the first
action of your application after calling vga_init(3) and finding out
which mode to use. Prior to exiting your application should call
vga_setmode(TEXT).
vga_setmode() returns 0 on success and -1 if this mode is not
available.
From svgalib-1.4.1, if mode is -1 then vga_setmode() returns the
current svgalib version, in BCD format, so svgalib 1.4.1 returns
0x1410.
mode should be one of the following, predefined values, or generally a
value in range 1 <= mode <= vga_lastmodenumber() where vga_modeinfo(3)
returned details about this mode. Instead of trying to set the mode,
vga_hasmode(3) determines if the mode would actually be supported. It
is also possible to use the numeric values given below though this is
discouraged. They are commonly used as values for the
SVGALIB_DEFAULT_MODE environment variable to set the
vga_getdefaultmode(3).
Here are the predefined values for mode.
Text mode
TEXT(0) restores textmode and falls back to ordinary text console
handling. All other calls switch to a graphics mode. You should set
this mode prior to exiting an svgalib application.
VGA compatible graphics modes
In general, for all modes following, the first number is the amount of
x pixels, the second the amount of y pixels, the third the number of
colors, with shortcuts 32K, 64K, 16M, 16M4 for 32768, 65536, and
1677721. Those with 2 or more than 256 colors use fixed color mappings
(either black and white or some RGB true/high color) the others make
use of a color lookup table.
Memory layout for the VGA modes is weird. Too weird to be explained
here, but you can check the usual VGA literature. vga_setmodeX(3) has
a short explanation which is valid for all 256 color modes.
G320x200x16(1), G640x200x16(2), G640x350x16(3), G640x480x16(4),
G320x200x256(5), G320x240x256(6), G320x400x256(7), G360x480x256(8), and
G640x480x2(9)
Basic SVGA modes
These use linear 256 color memory layouts similar to G320x200x256.
G640x480x256(10), G800x600x256(11), G1024x768x256(12), and
G1280x1024x256(13)
High color SVGA modes
These also use linear memory layouts, but for 32K & 64K each pixel
occupies two bytes and three for 16M. For 32K, each 16 bit word is
divided into 555 bit portions refering to 5 bit red, green, blue part.
The most significant bit is ignored by the card. For 64K the division
is 565 allowing to specify green in a little bit more detail (Human
eyes are more sensitive to green. People joke this is because our
ancestors lived in trees where light was filtered through green
leaves).
For the 16M modes, from low to high addresses the 3 bytes are named BGR
and specify the blue, green, red parts of the pixel value.
G320x200x32K(14), G320x200x64K(15), G320x200x16M(16), G640x480x32K(17),
G640x480x64K(18), G640x480x16M(19), G800x600x32K(20), G800x600x64K(21),
G800x600x16M(22), G1024x768x32K(23), G1024x768x64K(24),
G1024x768x16M(25), G1280x1024x32K(26), G1280x1024x64K(27), and
G1280x1024x16M(28)
High resolutions with less color numbers.
Memory layout is probably one nibble per pixel, two pixels per byte in
a linear fashion where the most significant nibble is the left most
pixel.
G800x600x16(29), G1024x768x16(30), and G1280x1024x16(31)
Hercules emulation mode
Again check out the ordinary VGA literature for the memory layout.
G720x348x2(32)
32-bit per pixel modes
These are similar to 16M but each pixel uses four bytes. The first
three are similar to 16M but the fourth is left empty and ignored by
the VGA card (you can store own status there).
This eases pixel address calculations on the screen and drawing
operations. However, 1/3 more data has to be moved to the screen.
Experiments show that usually the higher memory bandwidth used
outweighs the effects of the simplified algorithms by far.
G320x200x16M32(33), G640x480x16M32(34), G800x600x16M32(35),
G1024x768x16M32(36), and G1280x1024x16M32(37)
Some more resolutions
It should by now be clear how the modes will look.
G1152x864x16(38), G1152x864x256(39), G1152x864x32K(40),
G1152x864x64K(41), G1152x864x16M(42), G1152x864x16M32(43),
G1600x1200x16(44), G1600x1200x256(45), G1600x1200x32K(46),
G1600x1200x64K(47), G1600x1200x16M(48), and G1600x1200x16M32(49)
The vgatest(6) produces a list of supported modes for your hardware,
prints some info on the modes and allows you to try each of them.
SEE ALSO
svgalib(7), vgagl(7), libvga.config(5), vgatest(6), vga_hasmode(3),
vga_init(3), vga_modeinfo(3), vga_getcurrentmode(3),
vga_getdefaultmode(3), vga_lastmodenumber(3), vga_getmodename(3),
vga_getmodenumber(3)
AUTHOR
This manual page was edited by Michael Weller <eowmob@exp-math.uni-
essen.de>. The exact source of the referenced function as well as of
the original documentation is unknown.
It is very likely that both are at least to some extent are due to Harm
Hanemaayer <H.Hanemaayer@inter.nl.net>.
Occasionally this might be wrong. I hereby asked to be excused by the
original author and will happily accept any additions or corrections to
this first version of the svgalib manual.