Installation of Svgalib v1.2.12 or higher. Table of contents: 0. Introduction 1. Directories 2. Installation 3. SVGALib port to ALPHA AXP hardware 0. Introduction This is a low level graphics library for Linux, based on VGAlib 1.2 by Tommy Frandsen. VGAlib supported a number of standard VGA graphics modes, as well as Tseng ET4000 high resolution 256-color modes. Nowadays support for even more hardware is given. For details on supported chipsets, see the file 0-README which is equal to man 7 svgalib (when svgalib is installed). It supports transparent virtual console switching, that is, you can switch consoles to and from text and graphics mode consoles using alt-[function key]. Also, svgalib corrects most of VGAlib's textmode corruption behaviour by catching SIGSEGV, SIGFPE and SIGILL, and ensuring that a program is running in the currently visible virtual console before setting a graphics mode. Svgalib uses SIGUSR1 and SIGUSR2 internally to do so. When the library is first used by a program at run-time, the chipset is detected and the appropriate driver is used. This means that a graphics program will work on any card that is supported by svgalib, if the mode it uses is supported by the chipset driver for that card. The library is upwardly compatible with VGAlib. The set of drawing functions provided by svgalib itself is limited (mostly unchanged from VGAlib) and unoptimized; you can however use vga_setpage and graph_mem (which points to the 64K VGA framebuffer) in a program or graphics library. A fast external framebuffer graphics library for linear and banked 1, 2, 3 and 4 bytes per pixel modes is included (it also indirectly supports planar VGA modes). See 'man 7 vgagl' for details. One obvious application of the library is a picture viewer. Several are available, along with animation viewers. See the references at the end of 0-README. I have added a simple VGA textmode font restoration utility (restorefont) which may help if you suffer from XFree86 textmode font corruption. It can also be used to change the textmode font. It's in the utils/ directory, along with a README and some other textmode utilities: restoretextmode (which saves/restores textmode registers), restorepalette, and the script textmode. If you run the savetextmode script to save textmode information to /tmp, you'll be able to restore textmode by running the textmode script. If you have an ET4000 card, you should read the 0-README in the et4000/ directory. You will probably want to replace the ET4000 registers. 1. Directories doc/ README's and man pages. See the 0-README in this directory for info on how to read these man pages without installing svgalib and how to produce nice printouts. demos/ Demo and test programs. utils/ Textmode/font utilities. src/ Main library source. src/mouse/ Source for mouse interface. src/keyboard/ Source for keyboard interface. gl/ External framebuffer graphics library sources. support/ DOS-based utility for dumping VGA registers. et4000/ Notes, utilities and sample registers for ET4000. mach32/ Notes and a utility for the ATI mach32 driver. jump/ Configuration files for building DLL shared library. sharedlib/ Shared library image and stubs. threeDKit/ Routines to draw 3-dimensional triangles and 3D demos using these. lrmi-0.5m/ Linux real mode library (used for VESA driver) including a utility for restoring text mode I welcome any questions, comments, suggestions, bug-reports, etc. The source code is rather a mess, but there's hope. The new XFree86-style driver interface (used by the Cirrus and S3 drivers) and kernel module graphics that some are experimenting with should provide some momentum. Harm Hanemaayer hhanemaa@cs.ruu.nl Current maintainer is Matan Ziv-Av 2. Installation If you are happy with the configuration in 'Makefile.cfg' which means that you want to install an ELF shared library and probably an a.out shared library for support of some old binaries (and if the svgalib tar file you got already contains such an precompiled a.out shared library) just running make install as root should take care of proper installation. After installation, you MUST edit /etc/vga/libvga.config to set the monitor and mouse type. Depending on your hardware, other setup might be required. Checkout 'man 7 svgalib' for details after you installed svgalib (or see doc/0-README) It is a good idea to read and check the configurable section of Makefile.cfg nevertheless, even if you don't think you have to. Also, if your are using GLIBC you have to uncomment the definition of USEGLIBC in Makefile.cfg as glibc is not completely compatible to the linux libc (at least at compile time). Let me rephrase this: YOU MUST COMPILE AND INSTALL AS ROOT. If you don't nothing bad will happen during compilation, but certain tools won't be able to become SETUID ROOT which is required for proper operation. In case you change anything in 'Makefile.cfg' which does not just control which parts to install and where, you *MUST* issue a 'make clean' prior to 'make install' to remove any already compiled objects and force complete recompilation. Edit Makefile.cfg to change installation paths and to select the parts that should be installed. If you have an ET4000 card, read 'man 7 svgalib.et4000' and copy the appropriate register file to et4000.regs. Remember to set the DAC type. The default behaviour is the following: Shared libraries are installed in /lib and /usr/local/lib, header files in /usr/local/include (any old header files in /usr/include are removed). In the Slackware distribution the linkable libraries are in /usr/lib, and the utilities in /usr/bin; these are now removed by 'make install'. Until now just doing make install with Slackware might have produced duplicate binaries, but fortunately the newer version in /usr/local/* would have taken precedence in use. The et4000 registers (et4000.regs) are installed as /etc/vga/libvga.et4000, but only if this file does not exit yet. The same goes for the configuration file, libvga.config. Textmode utilities are installed in /usr/local/bin. These are restorefont, runx, restorepalette, dumpreg, restoretextmode, textmode, savetextmode, fix132x43, and mode3. If you change Makefile.cfg to install the static libraries, static libraries are compiled, and installed in /usr/local/lib. Note that you do not need to do this; the shared library is enough. If you now run 'make demoprogs', the demo programs are created in the demos/ and threeDKit/ directory. If you You can remove previously installed files (not the et4000 registers and config file and manual pages) with 'make uninstall'. In 1.28 the makefiles were changed. With minimal effort you can compile it from a separate (even read-only) source tree. Just make a copy of Makefile and Makefile.cfg into a writable dir, and change srcdir (or override from environment) to the directory where the source code is. This feature, as well as the code for ELF compilation was kindly contributed by Stephen Lee . `make static' compiles a static version of svgalib. It is not automatically installed by default but you can enable that from Makefile.cfg. Note though, that if you specify installation of the static libraries in 'Makefile.cfg' a simple 'make install' will compile the static library first. If you do not configure Makefile.cfg to install the shared libs, the demoprogs and utilities are linked against the new static lib (regardless of one already installed). However, the static libraries are not build automatically then. You must issue a 'make static' first. Building elf or a.out shared libraries can easily be configured in the Makefile.cfg. Be sure to issue a `make clean' after changing the TARGET_FORMAT setting. If you specified elf, `make install' will compile the shared libs as they don't come pre-built. This is nothing to worry about. Compilation is easy and will not use any user action. This is not true for a.out and there is a special hack in the makefiles for this. As svgalib is distributed there is no attempt to recompile the a.out sharedlibs. Prebuild images are already included. If you have the required tools-* installed and if you made patches (or just feel like recompiling) issue a `make clean' and `make shared' to enforce recompiling of the a.out sharedlibs (from then on even a make install will update the shared library if sources changed). Issue `make distclean' after a `make shared' to fall back to the distribution behaviour. However, getting the right tools becomes more and more complicated as it gets less important to give a.out support. Right now you even have to hand patch the last tools-* release to make it usuable with current compilers. In general I discourage trying to compile the a.out libs. Just use the images that come with svgalib. 3. SVGALib port to ALPHA AXP hardware David Mosberger-Tang contributed patches to make SVGALib run on Linux/Alpha namely APECS-based and low-cost PCI boards. It is known to run with #9 GXE (but all S3-based graphic cards should work if they are supported). He wrote a patch to make SVGALib run on Jensen boards. They own EISA slots instead of PCI slots and can not map video memory as a continous frame buffer. Use this patch with extreme care (do sync disks before starting compiled software for the first time!). He also recommends using SVGATextMode in combination with SVGALib-based software otherwise the library crunches the font (although the system should not crash). Here is a list of what is not supported yet: - vc-switching (due to lack of some signals supported by current ALPHA kernels but this could be fixed now [He used a 1.3.28 to test]) - font restoring without SVGATextMode (He still works on it) - clearing screen in mode 320x200x256 - vgagl (will never be ported by me because he thinks it is too much work and useless in the end) He tested his patch with an ELSA Winner 1000 but it should even work on other cards (He recommends to always sync disks, it saves a lot of time and sweat :-) ). If you compile it on a machine where __alpha__ is defined, you should have configured your kernel correctly once. This is due to the fact that he saw no other possibility to determine the type of ALPHA AXP hardware you use. During kernel configuration your are asked which architecture you want to compile it for. Also important: you must have the right libc compiled for your board hardware. This is due to the I/O functions in libc. They need to be compiled especially for your Alpha board. Have a look at ftp.azstarnet.com for precompiled libc's (although this is not very reliable, most of the libc-packages are sources). Note that he feels __not__ responsible for damage to your hardware when using this software. If you encounter any problems that refer to Jensen-type hardware you can send an email to me: If you encounter any problems that refer to Jensen-type hardware you can send an email to: Stephan Kanthak Here are some additional comments Michael Weller wrote on the first ALPHA patches from David Mosberger-Tang: No reports of other hardware working or not exist yet. This is REAL ALPHA software. I don't know any installation details. In theory you just recompile it out of the box (When you are using Linux/Alpha you are a hacker and should be able to create a shared lib w/o problems). I don't know any details, in case of problems please contact David. From what I saw you might have to use static libs. That's no real problem, a simple 'make static' will create a static lib. The background mode is said not to work on Dec-ALPHA, so you better disable it in Makefile.cfg