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