1Plex86/Bochs VGABios 2-------------------- 3 4The goal of this project is to have a LGPL'd Video Bios in plex86, 5Bochs and qemu. 6This VGA Bios is very specific to the emulated VGA card. 7It is NOT meant to drive a physical vga card. 8 9 10Cirrus SVGA extension 11--------------------- 12 13The Cirrus SVGA extension is designed for the Cirrus emulation in Bochs and 14qemu. The initial patch for the Cirrus extension has been written by Makoto 15Suzuki (suzu). 16 17 18Install 19------- 20To compile the VGA Bios you will need : 21- gcc 22- bcc 23- as86 24- ld86 25 26Untar the archive, and type make. You should get a "VGABIOS-lgpl-latest.bin" 27file. Alternatively, you can use the binary file "VGABIOS-lgpl-latest.bin", 28i have compiled for you. 29 30Edit your plex86/bochs conf file, and modify the load-rom command in the 31VGA BIOS section, to point to the new vgabios image file. 32 33 34Debugging 35--------- 36You can get a very basic debugging system: messages printed by the vgabios. 37You have to register the "unmapped" device driver in plex86 or bochs, and make 38sure it grabs port 0xfff0. 39 40Comment the #undef DEBUG at the beginning of vgabios.c. 41You can then use the "printf" function in the bios. 42 43 44Testing 45------- 46Look at the "testvga.c" file in the archive. This is a minimal Turbo C 2.0 47source file that calls a few int10 functions. Feel free to modify it to suit 48your needs. 49 50 51Copyright and License 52--------------------- 53This program has been written by Christophe Bothamy 54It is protected by the GNU Lesser Public License, which you should 55have received a copy of along with this package. 56 57 58Reverse Engineering 59------------------- 60The VGA Bios has been written without reverse-engineering any existing Bios. 61 62 63Acknowledgment 64-------------- 65The source code contains code ripped from rombios.c of plex86, written 66by Kevin Lawton <kevin2001@yahoo.com> 67 68The source code contains fonts from fntcol16.zip (c) by Joseph Gil avalable at : 69ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip 70These fonts are public domain 71 72The source code is based on information taken from : 73- Kevin Lawton's vga card emulation for bochs/plex86 74- Ralf Brown's interrupts list avalaible at 75 http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html 76- Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/ 77- Michael Abrash's Graphics Programming Black Book 78- Francois Gervais' book "programmation des cartes graphiques cga-ega-vga" 79 edited by sybex 80- DOSEMU 1.0.1 source code for several tables values and formulas 81 82 83Feedback 84-------- 85Please report any bugs, comments, patches for this VGA Bios to info@vruppert.de 86You can find the latest release at : http://www.nongnu.org/vgabios/ 87For any information on bochs, visit the website http://bochs.sourceforge.net/ 88For any information on qemu, visit the website http://fabrice.bellard.free.fr/qemu/ 89 90 91History 92------- 93vgabios-0.6b : May 30 2008 94 - Volker 95 . added PCI data structure for the Cirrus VGABIOS images 96 . minor bugfixes in biossums utility, VBE support and makefile 97 98vgabios-0.6a : Aug 19 2006 99 - Volker 100 . added minimal support for the video parameter table (VPT) 101 . Cirrus SVGA now supports the "no clear" bit in Cirrus and VESA mode 102 . Bochs VBE protected mode interface improved 103 . save/restore video state support for Bochs VBE and standard VGA added 104 . generate vbetables.h dynamicly 105 . VBE video memory increased to 8 MB (VBE dispi ID changed to B0C4) 106 . lots of 4bpp VBE fixes (all 4bpp VBE modes now enabled) 107 . VGA compatible setup for VBE modes added 108 109vgabios-0.5d : Dec 29 2005 110 - Volker 111 . Bochs VBE protected mode interface added (based on a patch by malc@pulsesoft.com) 112 . biossums utility now supports VGABIOS sizes up to 64 kBytes 113 . VGA mode 0x11: all color planes must be enabled in this 2-color VGA mode 114 115vgabios-0.5c : Jul 07 2005 116 - Volker 117 . BIOS configuration word usually reports initial mode 80x25 color text 118 . vgabios function 0x0e (write teletype): linefeed (0x0a) only increments the 119 cursor row value 120 121vgabios-0.5b : May 24 2005 122 - Volker 123 . fixed return value for the default case in the VBE section (non-debug mode) 124 . removed unused stuff 125 126vgabios-0.5a : Mar 07 2005 127 - Volker 128 . Cirrus SVGA extension (initial patches from Makoto Suzuki, improvements 129 from Fabrice Bellard) 130 . vgabios image size is now exactly 32k with a checksum 131 . a lot of vgabios and vbe functions rewritten in assembler 132 . dynamicly generated VBE mode info list 133 . write character function for CGA and LINEAR8 modes 134 . read/write graphics pixel for some graphics modes 135 . text scroll feature for some graphics modes 136 . VBE 8-bit DAC support 137 138vgabios-0.4c : Nov 06 2003 139 - Christophe 140 . fix font problem on initial screen of NT4 Loader 141 142vgabios-0.4b : Nov 04 2003 143 - Volker 144 . fix offset of character tables 145 . optimizations of CRT controller accesses 146 . VBE i/o registers changed to 0x01CE/CF 147 (suggestion from Daniel Gimpelevich) 148 . "noclear" flag stored in BIOS area 149 . fix character height returned by get_font_info function 150 151vgabios-0.4a : Aug 17 2003 152 - Volker 153 . VBE mode search rewritten (VBE modes with LFB bit removed) 154 . many bugfixes and optimizations 155 . write character function implemented for graphics modes 156 . support for 15bpp, 16bpp, 24bpp and 32bpp VBE modes added 157 . SVGA mode 0x6A added 158 . VBE modes 0x102, 0x117, 0x118 and 0x142 (Bochs specific) 159 160vgabios-0.3b : Nov 23 2002 161 - Christophe 162 . added lfb-mode numbers (patch from mathis) 163 . updated the Makefile 164 . removed display of copyrights. 165 . changed the Copyright string to "LGPL VGABios developers" 166 - Volker 167 . set the cursor shape depending on the current font height 168 . clear BL before calling int 0x10 function 0x1103 in vgabios_init_func 169 . added some text font functions 170 - Jeroen 171 . Forced to new DISPI (0xb0c1) interface (requires latest bochs vbe code) 172 . Added multibuffering support 173 . Added new DISPI interface for: virt width, height, x offset, y offset 174 . Added LFB modes (to be used with the vbe-lfb patch in bochs) 175 see VBE_HAVE_LFB in vbe.c (currently default enabled) 176 . updated TODO & docs for changes after bochs 1.4 177 178vgabios-0.3a : Mar 10 2002 179 - Christophe 180 . Fixed bug in function ah=13 181 - Jeroen 182 . updated vbebios implementation to new api 183 . added vbe_display_api documentation 184 . added 640x400x8, 640x480x8, 800x600x8, 1024x768 185 (>640x480 needs a special bochs patch atm) 186 . added 320x200x8 vbe support (uses the standard 320x200x8 vga mode to 187 display, this allows for testing & having something on screen as well, 188 at least until bochs host side display is up & running) 189 . adding lfbprof (vbe) testprogram (+some small fixes to it) 190 . merging with vbebios 0.2 191 192vgabios-0.2b : Nov 19 2001 193 - Christophe 194 . Fixed bug in function ah=13 195 196vgabios-0.2a : Nov 09 2001 197 - Christophe 198 . Included bugfix from techt@pikeonline.net about grayscale summing 199 . Added the "IBM" string at org 0x1e as Bart Oldeman suggested 200 . Fixed DS and ES that where inverted in the int10 parameters list! 201 . The following have been implemented : 202 - function ax=1a00, ax=1a01, ah=1b 203 - function ax=1130 204 . Added debug messages for unimplemented/unknown functions 205 Must be compiled with DEBUG defined. The output is trapped 206 by the unknown-ioport driver of plex/bochs (port 0xfff0 is used) 207 208vgabios-0.1a : May 8 2001 209 - Christophe 210 . First release. The work has been focused only on text mode. 211 . The following have been implemented : 212 - inits 213 - int 10 handler 214 - functions ah=00, ah=01, ah=02, ah=03, ah=05, ah=06, ah=07, ah=08 215 ah=09, ah=0a, ah=0e, ah=0f, ax=1000, ax=1001, ax=1002, ax=1003 216 ax=1007, ax=1008, ax=1009, ax=1010, ax=1012, ax=1013, ax=1015 217 ax=1017, ax=1018, ax=1019, ax=101a, ax=101b, ah=12 bl=10, 218 ah=12 bl=30, ah=12 bl=31, ah=12 bl=32, ah=12 bl=33, ah=12 bl=34 219 ah=13 220