Bochs

Welcome to the LGPL'd VGABios project

Introduction

The goal of this project is to have a LGPL'd Video Bios for Bochs and QEMU.
This VGA Bios is very specific to the emulated VGA card.
It is NOT meant to drive a physical vga card.


Bochs VBE extension

The Bochs VBE extension and it's Bochs device backend has been written by Jeroen Janssen (japj).
It impements support for VBE version 2.0.


Cirrus SVGA extension

The Cirrus SVGA extension is designed for the Cirrus emulation in Bochs and QEMU.
The initial patch for the Cirrus extension has been written by Makoto Suzuki (suzu).


Voodoo Banshee PCI extension

The Voodoo Banshee PCI extension is designed for the Banshee emulation in Bochs.
Some parts of the initial version are based on the Cirrus extension code.


News

2024-03-03 vruppert   Version 0.9a of the LGPL'd VGABios with VBE 2.0 protected mode interface for all extensions released on Github.
2024-01-07 vruppert   Version 0.8c of the LGPL'd VGABios with some more VBE bugfixes released on Github.
2023-12-28 vruppert   Version 0.8b of the LGPL'd VGABios with VBE bugfixes released on Github.
2023-12-14 vruppert   LGPL'd VGABios development moved to Github.
2021-06-03 vruppert   Version 0.8a of the LGPL'd VGABios with Voodoo Banshee for Bochs and Cirrus support for Bochs and Qemu is available now. This version will be included in the next Bochs release.
2021-04-12 vruppert   Added initial version of the LGPL'd VGABIOS for Voodoo Banshee PCI.
2020-01-03 vruppert   Version 0.7b of the LGPL'd VGABios with Cirrus support for Bochs and Qemu is available now. This version will be included in Bochs 2.6.11.
2019-12-29 vruppert   LGPL'd VGABIOS moved to SVN version control.
2011-10-30 vruppert   Version 0.7a of the LGPL'd VGABios with Cirrus support for Bochs and Qemu is available now. This version will be included in Bochs 2.5.
2009-04-08 vruppert   Version 0.6c has some improvements and minor bugfixes.
2008-05-30 vruppert   Version 0.6b has some improvements and minor bugfixes.
2006-08-19 vruppert   Version 0.6a of the LGPL'd VGABios with Cirrus support for Bochs and Qemu is available now. This version is to be included in Bochs 2.3.
2005-12-29 vruppert   Version 0.5d is a bugfix release.
2005-07-07 vruppert   Version 0.5c is a bugfix release.
2005-05-24 vruppert   Here is version 0.5b, with some bugfixes. This version is to be included in Bochs 2.2.
2005-03-07 vruppert   Version 0.5a of the LGPL'd VGABios with Cirrus support for Bochs and Qemu is available now. It will be included in the first pre-release of Bochs 2.2.
2003-11-06 cbothamy   Version 0.4c is a bugfix release.
2003-11-04 cbothamy   Here is version 0.4b, with several improvements and bugfixes. This version is to be included in Bochs 2.1
2003-08-17 cbothamy   Thanks to Volker's effort, we are able to release a 0.4a version to be included in the upcoming Bochs 2.1
2002-04-25 japj Latest Changes to the vbe code :
  • 4F06h Set/Get Logical Scan Line Length
  • 4F07h Set/Get Display Start
  • multibuffering support
  • 2002-03-27 cbothamy   vgabios v0.3a is shipping in Bochs 1.4 release !
    2002-03-10 cbothamy thanks to the great efforts of Jeroen, here is version 0.3a, including a start of implementation of the VESA Bios Extensions.
    2001-11-20 cbothamy version 0.2b is a bugfix release.
    2001-11-10 cbothamy eventually, here is version 0.2a of the vgabios. You will find bugfixes and new int10 functions implemented, but still no graphic mode working yet.
    2001-05-09 cbothamy The first release if the vgabios, labeled version 0.1a is available.

    See the ChangeLog for detailed information.
    Go to the download section.


    Development

    Go to the development home page hosted on savannah.gnu.org


    Screenshots

    Bootscreen Whatvga
    Bochs boot screen Whatvga showing 24-bpp mode


    Download

    Version Source Code Binary for Bochs VBE / Archive with all binaries (*) Binary for Bochs VBE with debug Binary for Cirrus emulation Binary for Cirrus emulation with debug
    0.8a vgabios-0.8a.tgz vgabios-0.8a-bin.tgz (*) - - -
    0.7b vgabios-0.7b.tgz vgabios-0.7b-bin.tgz (*) - - -
    0.7a vgabios-0.7a.tgz vgabios-0.7a.bin vgabios-0.7a.debug.bin vgabios-0.7a.cirrus.bin vgabios-0.7a.cirrus.debug.bin
    0.6c vgabios-0.6c.tgz vgabios-0.6c.bin vgabios-0.6c.debug.bin vgabios-0.6c.cirrus.bin vgabios-0.6c.cirrus.debug.bin
    0.6b vgabios-0.6b.tgz vgabios-0.6b.bin vgabios-0.6b.debug.bin vgabios-0.6b.cirrus.bin vgabios-0.6b.cirrus.debug.bin
    0.6a vgabios-0.6a.tgz vgabios-0.6a.bin vgabios-0.6a.debug.bin vgabios-0.6a.cirrus.bin vgabios-0.6a.cirrus.debug.bin
    0.5d vgabios-0.5d.tgz vgabios-0.5d.bin vgabios-0.5d.debug.bin vgabios-0.5d.cirrus.bin vgabios-0.5d.cirrus.debug.bin
    0.5c vgabios-0.5c.tgz vgabios-0.5c.bin vgabios-0.5c.debug.bin vgabios-0.5c.cirrus.bin vgabios-0.5c.cirrus.debug.bin
    0.5b vgabios-0.5b.tgz vgabios-0.5b.bin vgabios-0.5b.debug.bin vgabios-0.5b.cirrus.bin vgabios-0.5b.cirrus.debug.bin
    0.5a vgabios-0.5a.tgz vgabios-0.5a.bin vgabios-0.5a.debug.bin vgabios-0.5a.cirrus.bin vgabios-0.5a.cirrus.debug.bin
    0.4c vgabios-0.4c.tgz vgabios-0.4c.bin vgabios-0.4c.debug.bin - -

    NOTE: Versions prior to 0.4c are no longer available for download.
    NOTE: Versions starting with 0.8b are only available on Github.


    Installation

    To compile the VGA Bios you will need the following packages:

    Untar the archive, and type 'make'. You should get this set of binary files: "VGABIOS-lgpl-latest.bin", "VGABIOS-lgpl-latest.debug.bin", "VGABIOS-lgpl-latest.cirrus.bin", "VGABIOS-lgpl-latest.cirrus.debug.bin" and "VGABIOS-lgpl-latest.banshee.bin".
    Alternatively, you can use one of the precompiled binary files present in the archive.
    Edit your bochs config file, and modify the 'vgaromimage' directive to point it to the VGABIOS image you want to use.

    Debugging

    You can get a very basic debugging system: the VGABIOS sends messages to a usually unused ISA i/o port. The emulator prints the received characters to log file or console. In Bochs the "unmapped" device plugin must be loaded. It registers the VGABIOS info port 0x500.
    VGABIOS images compiled with the DEBUG symbol set, will use the "printf" function to write the messages to the info port.


    Testing

    Look at the "testvga.c" file in the archive. This is a minimal Turbo C 2.0 source file that calls a few int10 functions. Feel free to modify it to suit your needs.
    The LGPL'd VGABIOS is known to work with several guest operating systems:

    Of course, executing unimplemented functions will lead to unexpected results ;-)

    Copyright and License

    This program has been written by Christophe Bothamy, Jeroen Janssen and Volker Ruppert.
    It is protected by the GNU Lesser General Public License, which you should have received a copy of along with this package.


    Reverse Engineering

    The VGA Bios has been written without reverse-engineering any existing Bios.


    Acknowledgment

    The source code contains code ripped from the LGPL rombios.c of plex86, written by Kevin Lawton

    The source code contains fonts from fntcol16.zip (c) by Joseph Gil avalable at : ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
    These fonts are public domain

    The source code is based on information taken from :


    Links

    You can find the latest release at http://savannah.gnu.org/projects/vgabios/
    This home page is located at http://www.freesoftware.fsf.org/vgabios/

    For information on plex86, visit the website http://www.plex86.org/
    For information on bochs, visit the website http://bochs.sourceforge.net/


    Feedback

    Please report any bugs, comments, patches for this VGA Bios on savannah pages.