aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware/vgabios
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-07-04 13:02:31 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-07-04 13:02:31 +0100
commitb12217e1416a2f4ebabfa78b5d0a578d0d879d04 (patch)
tree27d8d3e737d4fca769e5f7167a8e50eeb32ec142 /tools/firmware/vgabios
parent52d9d32d02078742805861e7152c45b03209ebab (diff)
downloadxen-b12217e1416a2f4ebabfa78b5d0a578d0d879d04.tar.gz
xen-b12217e1416a2f4ebabfa78b5d0a578d0d879d04.tar.bz2
xen-b12217e1416a2f4ebabfa78b5d0a578d0d879d04.zip
vgabios: upgrade to CVS version
cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/vgabios co vgabios Patchs backported: - vgabios: Support VESA power management extensions. (cs 17692) - x86, hvm: Allow Cirrus VGA BIOS to clear framebuffer with minimal PIO writes. (cs 16242) This patch fixes the bug with the IDR boot CD. Signed-off-by: Jean Guyader <jean.guyader@eu.citrix.com>
Diffstat (limited to 'tools/firmware/vgabios')
-rw-r--r--tools/firmware/vgabios/ChangeLog204
-rw-r--r--tools/firmware/vgabios/Makefile16
-rw-r--r--tools/firmware/vgabios/README28
-rw-r--r--tools/firmware/vgabios/TODO4
-rw-r--r--tools/firmware/vgabios/biossums.c194
-rw-r--r--tools/firmware/vgabios/clext.c24
-rw-r--r--tools/firmware/vgabios/vbe.c514
-rw-r--r--tools/firmware/vgabios/vbe.h25
-rw-r--r--tools/firmware/vgabios/vbe_display_api.txt80
-rw-r--r--tools/firmware/vgabios/vbetables-gen.c240
-rw-r--r--tools/firmware/vgabios/vbetables.h3122
-rw-r--r--tools/firmware/vgabios/vgabios.c377
-rw-r--r--tools/firmware/vgabios/vgatables.h524
13 files changed, 3718 insertions, 1634 deletions
diff --git a/tools/firmware/vgabios/ChangeLog b/tools/firmware/vgabios/ChangeLog
index 08711f0c60..75be5bddae 100644
--- a/tools/firmware/vgabios/ChangeLog
+++ b/tools/firmware/vgabios/ChangeLog
@@ -1,3 +1,207 @@
+2008-05-11 08:40 vruppert
+
+ * biossums.c (1.6):
+
+ - fixed a warning
+
+2008-03-02 08:47 vruppert
+
+ * vbe.c (1.60):
+
+ - added debug message for unsupported VBE modes
+
+2008-02-24 09:18 vruppert
+
+ * vbe.c (1.59):
+
+ - in LFB modes the number of banks must be set to 1
+
+2008-01-27 10:44 vruppert
+
+ * Makefile (1.21), biossums.c (1.5), vgabios.c (1.67):
+
+ - added PCI data structure for the Cirrus VGABIOS images
+ - added support for the PCI data structure in biossums
+ - updated year in copyright
+
+2008-01-26 11:46 vruppert
+
+ * BUGS (1.4), Makefile (1.20), README (1.14), TODO (1.13), vbe_display_api.txt (1.14):
+
+ - whitespace cleanup
+
+2006-11-26 10:43 vruppert
+
+ * Makefile (1.19):
+
+ - disable the generation of linemarkers by the preprocessor, since the latest
+ versions of bcc don't like them
+
+2006-09-02 13:15 vruppert
+
+ * biossums.c (1.4):
+
+ - the biossums utility no longer modifies VGABIOS images with proper checksum
+ and size
+
+2006-08-19 14:28 vruppert
+
+ * Changelog (1.26), README (1.13), TODO (1.12):
+
+ - updates for 0.6a release
+
+2006-08-19 09:39 vruppert
+
+ * vbe.c (1.58):
+
+ - improved VGA compatible setup for VBE modes (disable CGA and Hercules
+ compatible memory layout)
+
+2006-08-18 20:39 vruppert
+
+ * vbe.c (1.57):
+
+ - improved VGA compatible setup for >=8bpp VBE modes (CRTC doubleword mode and
+ GRDC shift register setting added)
+ - now using symbolic name for CRTC address register
+
+2006-08-15 20:42 vruppert
+
+ * vbe.c (1.56), vbetables-gen.c (1.4):
+
+ - init 4bpp VBE modes by a temporary switch to VGA mode 0x6A
+ - all 4bpp VBE modes now enabled
+
+2006-08-14 20:24 vruppert
+
+ * vbe.c (1.55):
+
+ - VGA compatible setup for VBE modes improved (Bochs hack can be removed now)
+
+2006-08-12 07:51 vruppert
+
+ * .cvsignore (1.1):
+
+ - .cvsignore added for auto-generated file
+
+2006-08-12 07:47 vruppert
+
+ * vbe.c (1.54), vbe.h (1.27), vbe_display_api.txt (1.13), vbetables-gen.c (1.3):
+
+ - cleaned up VBE memory size definitions (removed duplicate defines, main
+ definition now in vbetables-gen.c)
+
+2006-08-09 21:28 vruppert
+
+ * vbetables.h (1.30):
+
+ - removed auto-generated file
+
+2006-08-09 21:26 vruppert
+
+ * vbe.c (1.53), vbe.h (1.26), vbe_display_api.txt (1.12), vbetables-gen.c (1.2),
+ vbetables.h (1.29):
+
+ - VBE video memory increased to 8 MB
+ - VBE dispi ID changed to B0C4
+ - documentation update
+
+2006-07-11 08:03 vruppert
+
+ * Makefile (1.18), vbetables-gen.c (1.1), vbetables.h (1.28):
+
+ - generate vbetables.h dynamicly
+ * initial patch from the qemu project by Fabrice Bellard
+ * only add modes that fit in video memory (still 4 MB)
+ * several other fixes (e.g. 4 bpp specific stuff, number of pages)
+
+2006-07-10 07:47 vruppert
+
+ * vgabios.c (1.66):
+
+ - biosfn_scroll(): check variable 'i' for underflowing when scrolling downwards
+ to avoid screen corruption
+
+2006-07-10 07:47 vruppert
+
+ * vbe.c (1.52):
+
+ - VBE set bank functions failure handling added
+ - VBE get/set logical scan line length fixes for the 4bpp mode
+
+2006-07-08 13:27 vruppert
+
+ * vbe.c (1.51), vbetables.h (1.27):
+
+ - added special case for the 4 bpp when setting VBE display start
+ - VBE mode table fixes
+
+2006-07-07 13:30 vruppert
+
+ * clext.c (1.12):
+
+ - bank pointer must be set to 0 after a mode set
+
+2006-06-21 16:58 vruppert
+
+ * vbe.c (1.50), vbetables.h (1.26):
+
+ - improved VBE display capabilities check (X resulution checked now)
+ - removed obsolete defines (LFB always available, always generate dynamic list)
+ - CR/LF to LF fixes
+
+2006-06-18 15:22 vruppert
+
+ * clext.c (1.11), vbe.c (1.49), vbe.h (1.25), vbetables.h (1.25), vgabios.c
+ (1.65):
+
+ - applied patch from the qemu project (Fabrice Bellard)
+ * Cirrus SVGA now supports the "no clear" bit when switching to Cirrus or
+ VESA mode
+ * Bochs VBE protected mode interface improved
+ * save/restore video state support for Bochs VBE and standard VGA added
+ * Bochs VBE prepared for more modi
+
+2006-03-25 10:19 vruppert
+
+ * clext.c (1.10), vgabios.c (1.64), vgatables.h (1.10):
+
+ - applied patch from Fabrice Bellard
+ * added minimal support for the video parameter table (VPT)
+ * added Cirrus SVGA mode 0x7b (1600x1200x8)
+
+2005-12-26 19:50 vruppert
+
+ * vbe.c (1.48), vgabios.c (1.63):
+
+ - Bochs VBE protected mode interface added (based on a patch by malc@pulsesoft.com)
+
+2005-12-26 19:50 vruppert
+
+ * biossums.c (1.3):
+
+ - biossums utility now supports VGABIOS sizes up to 64 kBytes
+
+2005-09-21 18:45 vruppert
+
+ * vgatables.h (1.9):
+
+ - mode 0x11: all color planes must be enabled in this 2-color VGA mode
+
+2005-08-30 18:41 vruppert
+
+ * biossums.c (1.2):
+
+ - missing license text added in biossums.c
+
+2005-07-02 18:39 vruppert
+
+ * vgabios.c (1.62):
+
+ - BIOS configuration word usually reports initial mode 80x25 color text
+ - vgabios function 0x0e (write teletype): linefeed (0x0a) only increments the
+ cursor row value
+
2005-05-24 16:50 vruppert
* vbe.c (1.47), vgabios.c (1.61):
diff --git a/tools/firmware/vgabios/Makefile b/tools/firmware/vgabios/Makefile
index b5482ea8c7..26bb871294 100644
--- a/tools/firmware/vgabios/Makefile
+++ b/tools/firmware/vgabios/Makefile
@@ -21,7 +21,7 @@ cirrus-bios: vgabios-cirrus.bin vgabios-cirrus.debug.bin
.PHONY: clean
clean:
- rm -f biossums *.o *.s *.ld86 \
+ rm -f biossums vbetables-gen vbetables.h *.o *.s *.ld86 \
temp.awk.* vgabios*.orig _vgabios_* _vgabios-debug_* core vgabios*.bin vgabios*.txt $(RELEASE).bin *.bak
rm -f VGABIOS-lgpl-latest*.bin
@@ -37,7 +37,7 @@ release:
tar czvf ../$(RELEASE).tgz --exclude CVS -C .. $(RELEASE)/
vgabios.bin: biossums vgabios.c vgabios.h vgafonts.h vgatables.h vbe.h vbe.c vbetables.h
- $(GCC) -E -P vgabios.c $(VGABIOS_VERS) $(VGABIOS_DATE) > _vgabios_.c
+ $(GCC) -E -P vgabios.c $(VGABIOS_VERS) -DVBE $(VGABIOS_DATE) > _vgabios_.c
$(BCC) -o vgabios.s -C-c -D__i86__ -S -0 _vgabios_.c
sed -e 's/^\.text//' -e 's/^\.data//' vgabios.s > _vgabios_.s
$(AS86) _vgabios_.s -b vgabios.bin -u -w- -g -0 -j -O -l vgabios.txt
@@ -47,7 +47,7 @@ vgabios.bin: biossums vgabios.c vgabios.h vgafonts.h vgatables.h vbe.h vbe.c vbe
ls -l VGABIOS-lgpl-latest.bin
vgabios.debug.bin: biossums vgabios.c vgabios.h vgafonts.h vgatables.h vbe.h vbe.c vbetables.h
- $(GCC) -E -P vgabios.c $(VGABIOS_VERS) -DDEBUG $(VGABIOS_DATE) > _vgabios-debug_.c
+ $(GCC) -E -P vgabios.c $(VGABIOS_VERS) -DVBE -DDEBUG $(VGABIOS_DATE) > _vgabios-debug_.c
$(BCC) -o vgabios-debug.s -C-c -D__i86__ -S -0 _vgabios-debug_.c
sed -e 's/^\.text//' -e 's/^\.data//' vgabios-debug.s > _vgabios-debug_.s
$(AS86) _vgabios-debug_.s -b vgabios.debug.bin -u -w- -g -0 -j -O -l vgabios.debug.txt
@@ -57,7 +57,7 @@ vgabios.debug.bin: biossums vgabios.c vgabios.h vgafonts.h vgatables.h vbe.h vbe
ls -l VGABIOS-lgpl-latest.debug.bin
vgabios-cirrus.bin: biossums vgabios.c vgabios.h vgafonts.h vgatables.h clext.c
- $(GCC) -E -P vgabios.c $(VGABIOS_VERS) -DCIRRUS $(VGABIOS_DATE) > _vgabios-cirrus_.c
+ $(GCC) -E -P vgabios.c $(VGABIOS_VERS) -DCIRRUS -DPCIBIOS $(VGABIOS_DATE) > _vgabios-cirrus_.c
$(BCC) -o vgabios-cirrus.s -C-c -D__i86__ -S -0 _vgabios-cirrus_.c
sed -e 's/^\.text//' -e 's/^\.data//' vgabios-cirrus.s > _vgabios-cirrus_.s
$(AS86) _vgabios-cirrus_.s -b vgabios-cirrus.bin -u -w- -g -0 -j -O -l vgabios-cirrus.txt
@@ -67,7 +67,7 @@ vgabios-cirrus.bin: biossums vgabios.c vgabios.h vgafonts.h vgatables.h clext.c
ls -l VGABIOS-lgpl-latest.cirrus.bin
vgabios-cirrus.debug.bin: biossums vgabios.c vgabios.h vgafonts.h vgatables.h clext.c
- $(GCC) -E -P vgabios.c $(VGABIOS_VERS) -DCIRRUS -DCIRRUS_DEBUG $(VGABIOS_DATE) > _vgabios-cirrus-debug_.c
+ $(GCC) -E -P vgabios.c $(VGABIOS_VERS) -DCIRRUS -DCIRRUS_DEBUG -DPCIBIOS $(VGABIOS_DATE) > _vgabios-cirrus-debug_.c
$(BCC) -o vgabios-cirrus-debug.s -C-c -D__i86__ -S -0 _vgabios-cirrus-debug_.c
sed -e 's/^\.text//' -e 's/^\.data//' vgabios-cirrus-debug.s > _vgabios-cirrus-debug_.s
$(AS86) _vgabios-cirrus-debug_.s -b vgabios-cirrus.debug.bin -u -w- -g -0 -j -O -l vgabios-cirrus.debug.txt
@@ -78,3 +78,9 @@ vgabios-cirrus.debug.bin: biossums vgabios.c vgabios.h vgafonts.h vgatables.h cl
biossums: biossums.c
$(CC) -o biossums biossums.c
+
+vbetables-gen: vbetables-gen.c
+ $(CC) -o vbetables-gen vbetables-gen.c
+
+vbetables.h: vbetables-gen
+ ./vbetables-gen > $@
diff --git a/tools/firmware/vgabios/README b/tools/firmware/vgabios/README
index 69462d93b7..a21fef1e8b 100644
--- a/tools/firmware/vgabios/README
+++ b/tools/firmware/vgabios/README
@@ -90,6 +90,34 @@ For any information on qemu, visit the website http://fabrice.bellard.free.fr/qe
History
-------
+vgabios-0.6b : May 30 2008
+ - Volker
+ . added PCI data structure for the Cirrus VGABIOS images
+ . minor bugfixes in biossums utility, VBE support and makefile
+
+vgabios-0.6a : Aug 19 2006
+ - Volker
+ . added minimal support for the video parameter table (VPT)
+ . Cirrus SVGA now supports the "no clear" bit in Cirrus and VESA mode
+ . Bochs VBE protected mode interface improved
+ . save/restore video state support for Bochs VBE and standard VGA added
+ . generate vbetables.h dynamicly
+ . VBE video memory increased to 8 MB (VBE dispi ID changed to B0C4)
+ . lots of 4bpp VBE fixes (all 4bpp VBE modes now enabled)
+ . VGA compatible setup for VBE modes added
+
+vgabios-0.5d : Dec 29 2005
+ - Volker
+ . Bochs VBE protected mode interface added (based on a patch by malc@pulsesoft.com)
+ . biossums utility now supports VGABIOS sizes up to 64 kBytes
+ . VGA mode 0x11: all color planes must be enabled in this 2-color VGA mode
+
+vgabios-0.5c : Jul 07 2005
+ - Volker
+ . BIOS configuration word usually reports initial mode 80x25 color text
+ . vgabios function 0x0e (write teletype): linefeed (0x0a) only increments the
+ cursor row value
+
vgabios-0.5b : May 24 2005
- Volker
. fixed return value for the default case in the VBE section (non-debug mode)
diff --git a/tools/firmware/vgabios/TODO b/tools/firmware/vgabios/TODO
index 0b83ed0992..6fa1df8a02 100644
--- a/tools/firmware/vgabios/TODO
+++ b/tools/firmware/vgabios/TODO
@@ -6,13 +6,11 @@ General
- Add new functionalities and modify static functionality table
- Performance : 16 bits IO
-v0.6
- - Reimplement the tables so it is compatible with the video save pointer table
+v0.7
- Implement the remaining functions (don't know if all are needed):
- chargen ax=1120, ax=1121, ax=1122, ax=1123, ax=1124
- display switch interface ah=12 bl=35
- video refresh control ah=12 bl=36
- - save/restore state ah=1c
- Graphic modes
v1.0
diff --git a/tools/firmware/vgabios/biossums.c b/tools/firmware/vgabios/biossums.c
index bb1d0ad7f7..d5816f420b 100644
--- a/tools/firmware/vgabios/biossums.c
+++ b/tools/firmware/vgabios/biossums.c
@@ -1,25 +1,35 @@
/* biossums.c --- written by Eike W. for the Bochs BIOS */
/* adapted for the LGPL'd VGABIOS by vruppert */
+/* This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
typedef unsigned char byte;
void check( int value, char* message );
-#define LEN_BIOS_DATA 0x8000
-#define MAX_OFFSET (LEN_BIOS_DATA - 1)
-
-
-#define BIOS_OFFSET 0x7FFF
+#define MAX_BIOS_DATA 0x10000
long chksum_bios_get_offset( byte* data, long offset );
byte chksum_bios_calc_value( byte* data, long offset );
byte chksum_bios_get_value( byte* data, long offset );
void chksum_bios_set_value( byte* data, long offset, byte value );
-
#define PMID_LEN 20
#define PMID_CHKSUM 19
@@ -28,33 +38,55 @@ byte chksum_pmid_calc_value( byte* data, long offset );
byte chksum_pmid_get_value( byte* data, long offset );
void chksum_pmid_set_value( byte* data, long offset, byte value );
+#define PCIR_LEN 24
-byte bios_data[LEN_BIOS_DATA];
+long chksum_pcir_get_offset( byte* data, long offset );
-int main( int argc, char* argv[] ) {
+byte bios_data[MAX_BIOS_DATA];
+long bios_len;
- FILE* stream;
- long offset, tmp_offset;
- byte cur_val = 0, new_val = 0;
- int hits;
+int main(int argc, char* argv[])
+{
+ FILE* stream;
+ long offset, tmp_offset, pcir_offset;
+ byte bios_len_byte, cur_val = 0, new_val = 0;
+ int hits, modified;
- if( argc != 2 ) {
+ if (argc != 2) {
printf( "Error. Need a file-name as an argument.\n" );
exit( EXIT_FAILURE );
}
- if(( stream = fopen( argv[1], "rb" )) == NULL ) {
- printf( "Error opening %s for reading.\n", argv[1] );
- exit( EXIT_FAILURE );
+ if ((stream = fopen(argv[1], "rb")) == NULL) {
+ printf("Error opening %s for reading.\n", argv[1]);
+ exit(EXIT_FAILURE);
}
- if( fread( bios_data, 1, LEN_BIOS_DATA, stream ) >= LEN_BIOS_DATA ) {
- printf( "Error reading max. 32767 Bytes from %s.\n", argv[1] );
- fclose( stream );
- exit( EXIT_FAILURE );
+ memset(bios_data, 0, MAX_BIOS_DATA);
+ bios_len = fread(bios_data, 1, MAX_BIOS_DATA, stream);
+ if (bios_len > MAX_BIOS_DATA) {
+ printf("Error reading max. 65536 Bytes from %s.\n", argv[1]);
+ fclose(stream);
+ exit(EXIT_FAILURE);
+ }
+ fclose(stream);
+ modified = 0;
+ if (bios_len < 0x8000) {
+ bios_len = 0x8000;
+ modified = 1;
+ } else if ((bios_len & 0x1FF) != 0) {
+ bios_len = (bios_len + 0x200) & ~0x1FF;
+ modified = 1;
+ }
+ bios_len_byte = (byte)(bios_len / 512);
+ if (bios_len_byte != bios_data[2]) {
+ if (modified == 0) {
+ bios_len += 0x200;
+ }
+ bios_data[2] = (byte)(bios_len / 512);
+ modified = 1;
}
- fclose( stream );
hits = 0;
offset = 0L;
@@ -67,44 +99,76 @@ int main( int argc, char* argv[] ) {
printf( "Calculated checksum: 0x%02X ", new_val );
hits++;
}
- if( hits == 1 && cur_val != new_val ) {
- printf( "Setting checksum." );
+ if ((hits == 1) && (cur_val != new_val)) {
+ printf("Setting checksum.");
chksum_pmid_set_value( bios_data, offset, new_val );
+ if (modified == 0) {
+ bios_len += 0x200;
+ bios_data[2]++;
+ }
+ modified = 1;
}
- if( hits >= 2 ) {
+ if (hits >= 2) {
printf( "Multiple PMID entries! No checksum set." );
}
- if( hits ) {
- printf( "\n" );
+ if (hits) {
+ printf("\n");
}
-
- offset = 0L;
- offset = chksum_bios_get_offset( bios_data, offset );
- cur_val = chksum_bios_get_value( bios_data, offset );
- new_val = chksum_bios_calc_value( bios_data, offset );
- printf( "\nBios checksum at: 0x%4lX\n", offset );
- printf( "Current checksum: 0x%02X\n", cur_val );
- printf( "Calculated checksum: 0x%02X ", new_val );
- if( cur_val != new_val ) {
- printf( "Setting checksum." );
- chksum_bios_set_value( bios_data, offset, new_val );
+ offset = 0L;
+ pcir_offset = chksum_pcir_get_offset( bios_data, offset );
+ if (pcir_offset != -1L) {
+ if (bios_data[pcir_offset + 16] != bios_data[2]) {
+ bios_data[pcir_offset + 16] = bios_data[2];
+ if (modified == 0) {
+ bios_len += 0x200;
+ bios_data[2]++;
+ bios_data[pcir_offset + 16]++;
+ }
+ modified = 1;
+ }
}
- printf( "\n" );
+ offset = 0L;
+ do {
+ offset = chksum_bios_get_offset(bios_data, offset);
+ cur_val = chksum_bios_get_value(bios_data, offset);
+ new_val = chksum_bios_calc_value(bios_data, offset);
+ if ((cur_val != new_val) && (modified == 0)) {
+ bios_len += 0x200;
+ bios_data[2]++;
+ if (pcir_offset != -1L) {
+ bios_data[pcir_offset + 16]++;
+ }
+ modified = 1;
+ } else {
+ printf("\nBios checksum at: 0x%4lX\n", offset);
+ printf("Current checksum: 0x%02X\n", cur_val);
+ printf("Calculated checksum: 0x%02X ", new_val);
+ if (cur_val != new_val) {
+ printf("Setting checksum.");
+ chksum_bios_set_value(bios_data, offset, new_val);
+ cur_val = new_val;
+ modified = 1;
+ }
+ printf( "\n" );
+ }
+ } while (cur_val != new_val);
- if(( stream = fopen( argv[1], "wb" )) == NULL ) {
- printf( "Error opening %s for writing.\n", argv[1] );
- exit( EXIT_FAILURE );
- }
- if( fwrite( bios_data, 1, LEN_BIOS_DATA, stream ) < LEN_BIOS_DATA ) {
- printf( "Error writing 32KBytes to %s.\n", argv[1] );
- fclose( stream );
- exit( EXIT_FAILURE );
+ if (modified == 1) {
+ if ((stream = fopen( argv[1], "wb")) == NULL) {
+ printf("Error opening %s for writing.\n", argv[1]);
+ exit(EXIT_FAILURE);
+ }
+ if (fwrite(bios_data, 1, bios_len, stream) < bios_len) {
+ printf("Error writing %d KBytes to %s.\n", bios_len / 1024, argv[1]);
+ fclose(stream);
+ exit(EXIT_FAILURE);
+ }
+ fclose(stream);
}
- fclose( stream );
- return( EXIT_SUCCESS );
+ return (EXIT_SUCCESS);
}
@@ -119,7 +183,7 @@ void check( int okay, char* message ) {
long chksum_bios_get_offset( byte* data, long offset ) {
- return( BIOS_OFFSET );
+ return (bios_len - 1);
}
@@ -129,7 +193,7 @@ byte chksum_bios_calc_value( byte* data, long offset ) {
byte sum;
sum = 0;
- for( i = 0; i < MAX_OFFSET; i++ ) {
+ for( i = 0; i < offset; i++ ) {
sum = sum + *( data + i );
}
sum = -sum; /* iso ensures -s + s == 0 on unsigned types */
@@ -139,13 +203,13 @@ byte chksum_bios_calc_value( byte* data, long offset ) {
byte chksum_bios_get_value( byte* data, long offset ) {
- return( *( data + BIOS_OFFSET ) );
+ return( *( data + offset ) );
}
void chksum_bios_set_value( byte* data, long offset, byte value ) {
- *( data + BIOS_OFFSET ) = value;
+ *( data + offset ) = value;
}
@@ -156,7 +220,7 @@ byte chksum_pmid_calc_value( byte* data, long offset ) {
byte sum;
len = PMID_LEN;
- check( offset + len <= MAX_OFFSET, "PMID entry length out of bounds" );
+ check((offset + len) <= (bios_len - 1), "PMID entry length out of bounds" );
sum = 0;
for( i = 0; i < len; i++ ) {
if( i != PMID_CHKSUM ) {
@@ -172,7 +236,7 @@ long chksum_pmid_get_offset( byte* data, long offset ) {
long result = -1L;
- while( offset + PMID_LEN < MAX_OFFSET ) {
+ while ((offset + PMID_LEN) < (bios_len - 1)) {
offset = offset + 1;
if( *( data + offset + 0 ) == 'P' && \
*( data + offset + 1 ) == 'M' && \
@@ -188,13 +252,31 @@ long chksum_pmid_get_offset( byte* data, long offset ) {
byte chksum_pmid_get_value( byte* data, long offset ) {
- check( offset + PMID_CHKSUM <= MAX_OFFSET, "PMID checksum out of bounds" );
+ check((offset + PMID_CHKSUM) <= (bios_len - 1), "PMID checksum out of bounds" );
return( *( data + offset + PMID_CHKSUM ) );
}
void chksum_pmid_set_value( byte* data, long offset, byte value ) {
- check( offset + PMID_CHKSUM <= MAX_OFFSET, "PMID checksum out of bounds" );
+ check((offset + PMID_CHKSUM) <= (bios_len - 1), "PMID checksum out of bounds" );
*( data + offset + PMID_CHKSUM ) = value;
}
+
+
+long chksum_pcir_get_offset( byte* data, long offset ) {
+
+ long result = -1L;
+
+ while ((offset + PCIR_LEN) < (bios_len - 1)) {
+ offset = offset + 1;
+ if( *( data + offset + 0 ) == 'P' && \
+ *( data + offset + 1 ) == 'C' && \
+ *( data + offset + 2 ) == 'I' && \
+ *( data + offset + 3 ) == 'R' ) {
+ result = offset;
+ break;
+ }
+ }
+ return( result );
+}
diff --git a/tools/firmware/vgabios/clext.c b/tools/firmware/vgabios/clext.c
index fe87e3cfdd..c501227422 100644
--- a/tools/firmware/vgabios/clext.c
+++ b/tools/firmware/vgabios/clext.c
@@ -239,6 +239,21 @@ unsigned short ccrtc_1280x1024x16[] = {
0xffff
};
+/* 1600x1200x8 */
+unsigned short cseq_1600x1200x8[] = {
+0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
+0x760b,0x760c,0x760d,0x760e,
+0x0412,0x0013,0x2017,
+0x341b,0x341c,0x341d,0x341e,
+0xffff
+};
+unsigned short ccrtc_1600x1200x8[] = {
+0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,
+0x6009,0x000c,0x000d,
+0x0310,0xff12,0xa013,0x4014,0xff15,0x2416,0xc317,0xff18,
+0x001a,0x221b,0x001d,
+0xffff
+};
cirrus_mode_t cirrus_modes[] =
{
@@ -292,6 +307,10 @@ cirrus_mode_t cirrus_modes[] =
cseq_1280x1024x16,cgraph_svgacolor,ccrtc_1280x1024x16,16,
6,5,11,6,5,5,0,0,0},
+ {0x7b,1600,1200,8,0x00,
+ cseq_1600x1200x8,cgraph_svgacolor,ccrtc_1600x1200x8,8,
+ 4,0,0,0,0,0,0,0,0},
+
{0xfe,0,0,0,0,cseq_vga,cgraph_vga,ccrtc_vga,0,
0xff,0,0,0,0,0,0,0,0},
{0xff,0,0,0,0,0,0,0,0,
@@ -1561,6 +1580,10 @@ cirrus_clear_vram_1:
cmp ah, bl
jne cirrus_clear_vram_1
+ xor ah,ah
+ mov dx, #0x3ce
+ out dx, ax
+
pop es
popa
ret
@@ -1652,6 +1675,7 @@ cirrus_vesa_handlers:
dw cirrus_vesa_10h
+
ASM_END
#ifdef CIRRUS_VESA3_PMINFO
diff --git a/tools/firmware/vgabios/vbe.c b/tools/firmware/vgabios/vbe.c
index e71099546e..87f7414a4b 100644
--- a/tools/firmware/vgabios/vbe.c
+++ b/tools/firmware/vgabios/vbe.c
@@ -30,19 +30,15 @@
// defines available
-// enable LFB support
-#define VBE_HAVE_LFB
// disable VESA/VBE2 check in vbe info
//#define VBE2_NO_VESA_CHECK
-// dynamicly generate a mode_info list
-#define DYN_LIST
-
#include "vbe.h"
#include "vbetables.h"
+#define VBE_TOTAL_VIDEO_MEMORY_DIV_64K (VBE_DISPI_TOTAL_VIDEO_MEMORY_MB*1024/64)
// The current OEM Software Revision of this VBE Bios
#define VBE_OEM_SOFTWARE_REV 0x0002;
@@ -52,10 +48,6 @@ extern char vbebios_vendor_name;
extern char vbebios_product_name;
extern char vbebios_product_revision;
-#ifndef DYN_LIST
-extern Bit16u vbebios_mode_list;
-#endif
-
ASM_START
// FIXME: 'merge' these (c) etc strings with the vgabios.c strings?
_vbebios_copyright:
@@ -71,7 +63,7 @@ _vbebios_product_name:
.byte 0x00
_vbebios_product_revision:
-.ascii "$Id: vbe.c,v 1.47 2005/05/24 16:50:50 vruppert Exp $"
+.ascii "$Id: vbe.c,v 1.60 2008/03/02 07:47:21 vruppert Exp $"
.byte 0x00
_vbebios_info_string:
@@ -88,35 +80,143 @@ _no_vbebios_info_string:
#if defined(USE_BX_INFO) || defined(DEBUG)
msg_vbe_init:
-.ascii "VBE Bios $Id: vbe.c,v 1.47 2005/05/24 16:50:50 vruppert Exp $"
+.ascii "VBE Bios $Id: vbe.c,v 1.60 2008/03/02 07:47:21 vruppert Exp $"
.byte 0x0a,0x0d, 0x00
#endif
-#ifndef DYN_LIST
-// FIXME: for each new mode add a statement here
-// at least until dynamic list creation is working
-_vbebios_mode_list:
-
-.word VBE_VESA_MODE_640X400X8
-.word VBE_VESA_MODE_640X480X8
-.word VBE_VESA_MODE_800X600X4
-.word VBE_VESA_MODE_800X600X8
-.word VBE_VESA_MODE_1024X768X8
-.word VBE_VESA_MODE_640X480X1555
-.word VBE_VESA_MODE_640X480X565
-.word VBE_VESA_MODE_640X480X888
-.word VBE_VESA_MODE_800X600X1555
-.word VBE_VESA_MODE_800X600X565
-.word VBE_VESA_MODE_800X600X888
-.word VBE_VESA_MODE_1024X768X1555
-.word VBE_VESA_MODE_1024X768X565
-.word VBE_VESA_MODE_1024X768X888
-.word VBE_OWN_MODE_640X480X8888
-.word VBE_OWN_MODE_800X600X8888
-.word VBE_OWN_MODE_1024X768X8888
-.word VBE_OWN_MODE_320X200X8
-.word VBE_VESA_MODE_END_OF_LIST
-#endif
+ .align 2
+vesa_pm_start:
+ dw vesa_pm_set_window - vesa_pm_start
+ dw vesa_pm_set_display_start - vesa_pm_start
+ dw vesa_pm_unimplemented - vesa_pm_start
+ dw vesa_pm_io_ports_table - vesa_pm_start
+vesa_pm_io_ports_table:
+ dw VBE_DISPI_IOPORT_INDEX
+ dw VBE_DISPI_IOPORT_INDEX + 1
+ dw VBE_DISPI_IOPORT_DATA
+ dw VBE_DISPI_IOPORT_DATA + 1
+ dw 0xffff
+ dw 0xffff
+
+ USE32
+vesa_pm_set_window:
+ cmp bx, #0x00
+ je vesa_pm_set_display_window1
+ mov ax, #0x0100
+ ret
+vesa_pm_set_display_window1:
+ mov ax, dx
+ push dx
+ push ax
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_BANK
+ out dx, ax
+ pop ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ out dx, ax
+ in ax, dx
+ pop dx
+ cmp dx, ax
+ jne illegal_window
+ mov ax, #0x004f
+ ret
+illegal_window:
+ mov ax, #0x014f
+ ret
+
+vesa_pm_set_display_start:
+ cmp bl, #0x80
+ je vesa_pm_set_display_start1
+ cmp bl, #0x00
+ je vesa_pm_set_display_start1
+ mov ax, #0x0100
+ ret
+vesa_pm_set_display_start1:
+; convert offset to (X, Y) coordinate
+; (would be simpler to change Bochs VBE API...)
+ push eax
+ push ecx
+ push edx
+ push esi
+ push edi
+ shl edx, #16
+ and ecx, #0xffff
+ or ecx, edx
+ shl ecx, #2
+ mov eax, ecx
+
+ push eax
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_VIRT_WIDTH
+ out dx, ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ in ax, dx
+ movzx ecx, ax
+
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_BPP
+ out dx, ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ in ax, dx
+ movzx esi, ax
+ pop eax
+
+ cmp esi, #4
+ jz bpp4_mode
+ add esi, #7
+ shr esi, #3
+ imul ecx, esi
+ xor edx, edx
+ div ecx
+ mov edi, eax
+ mov eax, edx
+ xor edx, edx
+ div esi
+ jmp set_xy_regs
+
+bpp4_mode:
+ shr ecx, #1
+ xor edx, edx
+ div ecx
+ mov edi, eax
+ mov eax, edx
+ shl eax, #1
+
+set_xy_regs:
+ push dx
+ push ax
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_X_OFFSET
+ out dx, ax
+ pop ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ out dx, ax
+ pop dx
+
+ mov ax, di
+ push dx
+ push ax
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_Y_OFFSET
+ out dx, ax
+ pop ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ out dx, ax
+ pop dx
+
+ pop edi
+ pop esi
+ pop edx
+ pop ecx
+ pop eax
+ mov ax, #0x004f
+ ret
+
+vesa_pm_unimplemented:
+ mov ax, #0x014f
+ ret
+ USE16
+vesa_pm_end:
; DISPI ioport functions
@@ -158,20 +258,6 @@ ASM_START
mov dx, # VBE_DISPI_IOPORT_DATA
mov ax, 4[bp] ; xres
out dx, ax
- push ax
- mov dx, #0x03d4
- mov ax, #0x0011
- out dx, ax
- mov dx, #0x03d4
- pop ax
- push ax
- shr ax, #3
- dec ax
- mov ah, al
- mov al, #0x01
- out dx, ax
- pop ax
- call vga_set_virt_width
pop dx
pop ax
@@ -211,6 +297,28 @@ get_bpp_noinc:
pop dx
ret
+; get display capabilities
+
+_dispi_get_max_xres:
+ push dx
+ push bx
+ call dispi_get_enable
+ mov bx, ax
+ or ax, # VBE_DISPI_GETCAPS
+ call _dispi_set_enable
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_XRES
+ out dx, ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ in ax, dx
+ push ax
+ mov ax, bx
+ call _dispi_set_enable
+ pop ax
+ pop bx
+ pop dx
+ ret
+
_dispi_get_max_bpp:
push dx
push bx
@@ -283,13 +391,20 @@ ASM_START
je dispi_set_bank_farcall_get
or bx,bx
jnz dispi_set_bank_farcall_error
+ mov ax,dx
push dx
+ push ax
mov ax,# VBE_DISPI_INDEX_BANK
mov dx,# VBE_DISPI_IOPORT_INDEX
out dx,ax
pop ax
mov dx,# VBE_DISPI_IOPORT_DATA
out dx,ax
+ in ax,dx
+ pop dx
+ cmp dx,ax
+ jne dispi_set_bank_farcall_error
+ mov ax, #0x004f
retf
dispi_set_bank_farcall_get:
mov ax,# VBE_DISPI_INDEX_BANK
@@ -358,10 +473,10 @@ vga_set_virt_width:
call dispi_get_bpp
cmp al, #0x04
ja set_width_svga
- shr bx, #2
+ shr bx, #1
set_width_svga:
- shr bx, #2
- mov dx, #0x03d4
+ shr bx, #3
+ mov dx, # VGAREG_VGA_CRTC_ADDRESS
mov ah, bl
mov al, #0x13
out dx, ax
@@ -402,6 +517,134 @@ dispi_get_virt_height:
in ax, dx
pop dx
ret
+
+_vga_compat_setup:
+ push ax
+ push dx
+
+ ; set CRT X resolution
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_XRES
+ out dx, ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ in ax, dx
+ push ax
+ mov dx, # VGAREG_VGA_CRTC_ADDRESS
+ mov ax, #0x0011
+ out dx, ax
+ pop ax
+ push ax
+ shr ax, #3
+ dec ax
+ mov ah, al
+ mov al, #0x01
+ out dx, ax
+ pop ax
+ call vga_set_virt_width
+
+ ; set CRT Y resolution
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_YRES
+ out dx, ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ in ax, dx
+ dec ax
+ push ax
+ mov dx, # VGAREG_VGA_CRTC_ADDRESS
+ mov ah, al
+ mov al, #0x12
+ out dx, ax
+ pop ax
+ mov al, #0x07
+ out dx, al
+ inc dx
+ in al, dx
+ and al, #0xbd
+ test ah, #0x01
+ jz bit8_clear
+ or al, #0x02
+bit8_clear:
+ test ah, #0x02
+ jz bit9_clear
+ or al, #0x40
+bit9_clear:
+ out dx, al
+
+ ; other settings
+ mov dx, # VGAREG_VGA_CRTC_ADDRESS
+ mov ax, #0x0009
+ out dx, ax
+ mov al, #0x17
+ out dx, al
+ mov dx, # VGAREG_VGA_CRTC_DATA
+ in al, dx
+ or al, #0x03
+ out dx, al
+ mov dx, # VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, # VGAREG_ACTL_ADDRESS
+ mov al, #0x10
+ out dx, al
+ mov dx, # VGAREG_ACTL_READ_DATA
+ in al, dx
+ or al, #0x01
+ mov dx, # VGAREG_ACTL_ADDRESS
+ out dx, al
+ mov al, #0x20
+ out dx, al
+ mov dx, # VGAREG_GRDC_ADDRESS
+ mov ax, #0x0506
+ out dx, ax
+ mov dx, # VGAREG_SEQU_ADDRESS
+ mov ax, #0x0f02
+ out dx, ax
+
+ ; settings for >= 8bpp
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_BPP
+ out dx, ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ in ax, dx
+ cmp al, #0x08
+ jb vga_compat_end
+ mov dx, # VGAREG_VGA_CRTC_ADDRESS
+ mov al, #0x14
+ out dx, al
+ mov dx, # VGAREG_VGA_CRTC_DATA
+ in al, dx
+ or al, #0x40
+ out dx, al
+ mov dx, # VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, # VGAREG_ACTL_ADDRESS
+ mov al, #0x10
+ out dx, al
+ mov dx, # VGAREG_ACTL_READ_DATA
+ in al, dx
+ or al, #0x40
+ mov dx, # VGAREG_ACTL_ADDRESS
+ out dx, al
+ mov al, #0x20
+ out dx, al
+ mov dx, # VGAREG_SEQU_ADDRESS
+ mov al, #0x04
+ out dx, al
+ mov dx, # VGAREG_SEQU_DATA
+ in al, dx
+ or al, #0x08
+ out dx, al
+ mov dx, # VGAREG_GRDC_ADDRESS
+ mov al, #0x05
+ out dx, al
+ mov dx, # VGAREG_GRDC_DATA
+ in al, dx
+ and al, #0x9f
+ or al, #0x40
+ out dx, al
+
+vga_compat_end:
+ pop dx
+ pop ax
ASM_END
@@ -472,7 +715,7 @@ vbe_init:
mov [bx], al
pop bx
pop ds
- mov ax, # VBE_DISPI_ID3
+ mov ax, # VBE_DISPI_ID4
call dispi_set_id
no_vbe_interface:
#if defined(USE_BX_INFO) || defined(DEBUG)
@@ -573,15 +816,9 @@ Bit16u *AX;Bit16u ES;Bit16u DI;
vbe_info_block.Capabilities[2] = 0;
vbe_info_block.Capabilities[3] = 0;
-#ifdef DYN_LIST
// VBE Video Mode Pointer (dynamicly generated from the mode_info_list)
vbe_info_block.VideoModePtr_Seg= ES ;
vbe_info_block.VideoModePtr_Off= DI + 34;
-#else
- // VBE Video Mode Pointer (staticly in rom)
- vbe_info_block.VideoModePtr_Seg = 0xc000;
- vbe_info_block.VideoModePtr_Off = &vbebios_mode_list;
-#endif
// VBE Total Memory (in 64b blocks)
vbe_info_block.TotalMemory = VBE_TOTAL_VIDEO_MEMORY_DIV_64K;
@@ -606,23 +843,26 @@ Bit16u *AX;Bit16u ES;Bit16u DI;
memcpyb(ES, DI, ss, &vbe_info_block, 256);
}
-#ifdef DYN_LIST
do
{
- if (cur_info->info.BitsPerPixel <= dispi_get_max_bpp()) {
+ if ((cur_info->info.XResolution <= dispi_get_max_xres()) &&
+ (cur_info->info.BitsPerPixel <= dispi_get_max_bpp())) {
#ifdef DEBUG
printf("VBE found mode %x => %x\n", cur_info->mode,cur_mode);
#endif
write_word(ES, DI + cur_ptr, cur_info->mode);
cur_mode++;
cur_ptr+=2;
+ } else {
+#ifdef DEBUG
+ printf("VBE mode %x (xres=%x / bpp=%02x) not supported by display\n", cur_info->mode,cur_info->info.XResolution,cur_info->info.BitsPerPixel);
+#endif
}
cur_info++;
} while (cur_info->mode != VBE_VESA_MODE_END_OF_LIST);
// Add vesa mode list terminator
write_word(ES, DI + cur_ptr, cur_info->mode);
-#endif
result = 0x4f;
@@ -666,6 +906,9 @@ Bit16u *AX;Bit16u CX; Bit16u ES;Bit16u DI;
#endif
memsetb(ss, &info, 0, sizeof(ModeInfoBlock));
memcpyb(ss, &info, 0xc000, &(cur_info->info), sizeof(ModeInfoBlockCompact));
+ if (using_lfb) {
+ info.NumberOfBanks = 1;
+ }
if (info.WinAAttributes & VBE_WINDOW_ATTRIBUTE_RELOCATABLE) {
info.WinFuncPtr = 0xC0000000UL;
*(Bit16u *)&(info.WinFuncPtr) = (Bit16u)(dispi_set_bank_farcall);
@@ -747,7 +990,7 @@ Bit16u *AX;Bit16u BX; Bit16u ES;Bit16u DI;
// first disable current mode (when switching between vesa modi)
dispi_set_enable(VBE_DISPI_DISABLED);
- if (cur_info->mode == VBE_VESA_MODE_800X600X4)
+ if (cur_info->info.BitsPerPixel == 4)
{
biosfn_set_video_mode(0x6a);
}
@@ -757,6 +1000,7 @@ Bit16u *AX;Bit16u BX; Bit16u ES;Bit16u DI;
dispi_set_yres(cur_info->info.YResolution);
dispi_set_bank(0);
dispi_set_enable(VBE_DISPI_ENABLED | no_clear | lfb_flag);
+ vga_compat_setup();
write_word(BIOSMEM_SEG,BIOSMEM_VBE_MODE,BX);
write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL,(0x60 | no_clear));
@@ -812,6 +1056,64 @@ vbe_03_ok:
ASM_END
+Bit16u vbe_biosfn_read_video_state_size()
+{
+ return 9 * 2;
+}
+
+void vbe_biosfn_save_video_state(ES, BX)
+ Bit16u ES; Bit16u BX;
+{
+ Bit16u enable, i;
+
+ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
+ enable = inw(VBE_DISPI_IOPORT_DATA);
+ write_word(ES, BX, enable);
+ BX += 2;
+ if (!(enable & VBE_DISPI_ENABLED))
+ return;
+ for(i = VBE_DISPI_INDEX_XRES; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
+ if (i != VBE_DISPI_INDEX_ENABLE) {
+ outw(VBE_DISPI_IOPORT_INDEX, i);
+ write_word(ES, BX, inw(VBE_DISPI_IOPORT_DATA));
+ BX += 2;
+ }
+ }
+}
+
+
+void vbe_biosfn_restore_video_state(ES, BX)
+ Bit16u ES; Bit16u BX;
+{
+ Bit16u enable, i;
+
+ enable = read_word(ES, BX);
+ BX += 2;
+
+ if (!(enable & VBE_DISPI_ENABLED)) {
+ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
+ outw(VBE_DISPI_IOPORT_DATA, enable);
+ } else {
+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_XRES);
+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+ BX += 2;
+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);
+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+ BX += 2;
+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);
+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+ BX += 2;
+ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
+ outw(VBE_DISPI_IOPORT_DATA, enable);
+
+ for(i = VBE_DISPI_INDEX_BANK; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
+ outw(VBE_DISPI_IOPORT_INDEX, i);
+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+ BX += 2;
+ }
+ }
+}
+
/** Function 04h - Save/Restore State
*
* Input:
@@ -826,10 +1128,48 @@ ASM_END
* BX = Number of 64-byte blocks to hold the state buffer (if DL=00h)
*
*/
-void vbe_biosfn_save_restore_state(AX, DL, CX, ES, BX)
+void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX)
+Bit16u *AX; Bit16u CX; Bit16u DX; Bit16u ES; Bit16u *BX;
{
-}
+ Bit16u ss=get_SS();
+ Bit16u result, val;
+ result = 0x4f;
+ switch(GET_DL()) {
+ case 0x00:
+ val = biosfn_read_video_state_size2(CX);
+#ifdef DEBUG
+ printf("VGA state size=%x\n", val);
+#endif
+ if (CX & 8)
+ val += vbe_biosfn_read_video_state_size();
+ write_word(ss, BX, val);
+ break;
+ case 0x01:
+ val = read_word(ss, BX);
+ val = biosfn_save_video_state(CX, ES, val);
+#ifdef DEBUG
+ printf("VGA save_state offset=%x\n", val);
+#endif
+ if (CX & 8)
+ vbe_biosfn_save_video_state(ES, val);
+ break;
+ case 0x02:
+ val = read_word(ss, BX);
+ val = biosfn_restore_video_state(CX, ES, val);
+#ifdef DEBUG
+ printf("VGA restore_state offset=%x\n", val);
+#endif
+ if (CX & 8)
+ vbe_biosfn_restore_video_state(ES, val);
+ break;
+ default:
+ // function failed
+ result = 0x100;
+ break;
+ }
+ write_word(ss, AX, result);
+}
/** Function 05h - Display Window Control
*
@@ -913,6 +1253,11 @@ set_logical_scan_line_bytes:
call dispi_get_bpp
xor bh, bh
mov bl, ah
+ or bl, bl
+ jnz no_4bpp_1
+ shl ax, #3
+ mov bl, #1
+no_4bpp_1:
xor dx, dx
pop ax
div bx
@@ -924,6 +1269,11 @@ get_logical_scan_line_length:
mov bl, ah
call dispi_get_virt_width
mov cx, ax
+ or bl, bl
+ jnz no_4bpp_2
+ shr ax, #3
+ mov bl, #1
+no_4bpp_2:
mul bx
mov bx, ax
call dispi_get_virt_height
@@ -1055,14 +1405,28 @@ void vbe_biosfn_set_get_palette_data(AX)
}
/** Function 0Ah - Return VBE Protected Mode Interface
- *
- * Input:
- * AX = 4F0Ah
- * Output:
- * AX = VBE Return Status
+ * Input: AX = 4F0Ah VBE 2.0 Protected Mode Interface
+ * BL = 00h Return protected mode table
*
- * FIXME: incomplete API description, Input & Output
+ *
+ * Output: AX = Status
+ * ES = Real Mode Segment of Table
+ * DI = Offset of Table
+ * CX = Length of Table including protected mode code
+ * (for copying purposes)
*/
-void vbe_biosfn_return_protected_mode_interface(AX)
-{
-}
+ASM_START
+vbe_biosfn_return_protected_mode_interface:
+ test bl, bl
+ jnz _fail
+ mov di, #0xc000
+ mov es, di
+ mov di, # vesa_pm_start
+ mov cx, # vesa_pm_end
+ sub cx, di
+ mov ax, #0x004f
+ ret
+_fail:
+ mov ax, #0x014f
+ ret
+ASM_END
diff --git a/tools/firmware/vgabios/vbe.h b/tools/firmware/vgabios/vbe.h
index 621048a1c7..60434ac7d7 100644
--- a/tools/firmware/vgabios/vbe.h
+++ b/tools/firmware/vgabios/vbe.h
@@ -14,7 +14,7 @@ Boolean vbe_has_vbe_display();
void vbe_biosfn_return_controller_information(AX, ES, DI);
void vbe_biosfn_return_mode_information(AX, CX, ES, DI);
void vbe_biosfn_set_mode(AX, BX, ES, DI);
-void vbe_biosfn_save_restore_state(AX, DL, CX, ES, BX);
+void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX);
void vbe_biosfn_set_get_palette_data(AX);
void vbe_biosfn_return_protected_mode_interface(AX);
@@ -151,6 +151,12 @@ typedef struct ModeInfoBlock
Bit8u Reserved[189];
} ModeInfoBlock;
+typedef struct ModeInfoListItem
+{
+ Bit16u mode;
+ ModeInfoBlockCompact info;
+} ModeInfoListItem;
+
// VBE Return Status Info
// AL
#define VBE_RETURN_STATUS_SUPPORTED 0x4F
@@ -193,6 +199,10 @@ typedef struct ModeInfoBlock
#define VBE_VESA_MODE_1280X1024X1555 0x119
#define VBE_VESA_MODE_1280X1024X565 0x11A
#define VBE_VESA_MODE_1280X1024X888 0x11B
+#define VBE_VESA_MODE_1600X1200X8 0x11C
+#define VBE_VESA_MODE_1600X1200X1555 0x11D
+#define VBE_VESA_MODE_1600X1200X565 0x11E
+#define VBE_VESA_MODE_1600X1200X888 0x11F
// BOCHS/PLEX86 'own' mode numbers
#define VBE_OWN_MODE_320X200X8888 0x140
@@ -202,6 +212,12 @@ typedef struct ModeInfoBlock
#define VBE_OWN_MODE_1024X768X8888 0x144
#define VBE_OWN_MODE_1280X1024X8888 0x145
#define VBE_OWN_MODE_320X200X8 0x146
+#define VBE_OWN_MODE_1600X1200X8888 0x147
+#define VBE_OWN_MODE_1152X864X8 0x148
+#define VBE_OWN_MODE_1152X864X1555 0x149
+#define VBE_OWN_MODE_1152X864X565 0x14a
+#define VBE_OWN_MODE_1152X864X888 0x14b
+#define VBE_OWN_MODE_1152X864X8888 0x14c
#define VBE_VESA_MODE_END_OF_LIST 0xFFFF
@@ -259,8 +275,6 @@ typedef struct ModeInfoBlock
// like 0xE0000000
- #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 4
-
#define VBE_DISPI_BANK_ADDRESS 0xA0000
#define VBE_DISPI_BANK_SIZE_KB 64
@@ -285,6 +299,7 @@ typedef struct ModeInfoBlock
#define VBE_DISPI_ID1 0xB0C1
#define VBE_DISPI_ID2 0xB0C2
#define VBE_DISPI_ID3 0xB0C3
+ #define VBE_DISPI_ID4 0xB0C4
#define VBE_DISPI_DISABLED 0x00
#define VBE_DISPI_ENABLED 0x01
@@ -295,8 +310,4 @@ typedef struct ModeInfoBlock
#define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000
-
-#define VBE_TOTAL_VIDEO_MEMORY_DIV_64K (VBE_DISPI_TOTAL_VIDEO_MEMORY_MB*1024/64)
-
-
#endif
diff --git a/tools/firmware/vgabios/vbe_display_api.txt b/tools/firmware/vgabios/vbe_display_api.txt
index 788e17a790..fddb78b4bc 100644
--- a/tools/firmware/vgabios/vbe_display_api.txt
+++ b/tools/firmware/vgabios/vbe_display_api.txt
@@ -4,7 +4,7 @@ VBE Display API
it specifies the bochs host <-> vbebios client communication.
That means, the display code implementation and the vbebios code depend
- very heavily on each other. As such, this documents needs be synchronised
+ very heavily on each other. As such, this documents needs be synchronised
between bochs CVS and the vgabios CVS.
This document does not describe how the VBEBios implements the VBE2/3 spec.
@@ -12,7 +12,7 @@ VBE Display API
API History
------------
+-----------
0xb0c0 supports the following VBE_DISPI_ interfaces (present in Bochs 1.4):
VBE_DISPI_INDEX_ID
VBE_DISPI_INDEX_XRES
@@ -20,7 +20,7 @@ API History
VBE_DISPI_INDEX_BPP
VBE_DISPI_INDEX_ENABLE
VBE_DISPI_INDEX_BANK
-
+
Bpp format supported is:
VBE_DISPI_BPP_8
@@ -40,13 +40,15 @@ API History
additional features:
VBE_DISPI_INDEX_ENABLE supports new flags VBE_DISPI_GETCAPS and VBE_DISPI_8BIT_DAC
+0xb0c4 VBE video memory increased to 8 MB
+
History
-------
Version 0.6 2002 Nov 23 Jeroen Janssen
- Added LFB support
- Added Virt width, height and x,y offset
-
+
Version 0.5 2002 March 08 Jeroen Janssen
- Added documentation about panic behaviour / current limits of the data values.
- Changed BPP API (in order to include future (A)RGB formats)
@@ -60,16 +62,16 @@ Todo
References
----------
- [VBE3] VBE 3 Specification at
+ [VBE3] VBE 3 Specification at
http://www.vesa.org/vbe3.pdf
-
- [BOCHS] Bochs Open Source IA-32 Emulator at
+
+ [BOCHS] Bochs Open Source IA-32 Emulator at
http://bochs.sourceforge.net
-
- [VBEBIOS] VBE Bios for Bochs at
+
+ [VBEBIOS] VBE Bios for Bochs at
http://savannah.gnu.org/projects/vgabios/
-
- [Screenshots] Screenshots of programs using the VBE Bios at
+
+ [Screenshots] Screenshots of programs using the VBE Bios at
http://japj.org/projects/bochs_plex86/screenshots.html
Abbreviations
@@ -82,16 +84,19 @@ Abbreviations
#defines
--------
- #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 4
+vbetables-gen.c
+ #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8
+
+vbe.h
#define VBE_DISPI_BANK_ADDRESS 0xA0000
#define VBE_DISPI_BANK_SIZE_KB 64
-
+
#define VBE_DISPI_MAX_XRES 1024
#define VBE_DISPI_MAX_YRES 768
-
+
#define VBE_DISPI_IOPORT_INDEX 0x01CE
#define VBE_DISPI_IOPORT_DATA 0x01CF
-
+
#define VBE_DISPI_INDEX_ID 0x0
#define VBE_DISPI_INDEX_XRES 0x1
#define VBE_DISPI_INDEX_YRES 0x2
@@ -102,21 +107,23 @@ Abbreviations
#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7
#define VBE_DISPI_INDEX_X_OFFSET 0x8
#define VBE_DISPI_INDEX_Y_OFFSET 0x9
-
+
#define VBE_DISPI_ID0 0xB0C0
#define VBE_DISPI_ID1 0xB0C1
#define VBE_DISPI_ID2 0xB0C2
-
+ #define VBE_DISPI_ID3 0xB0C3
+ #define VBE_DISPI_ID4 0xB0C4
+
#define VBE_DISPI_DISABLED 0x00
#define VBE_DISPI_ENABLED 0x01
#define VBE_DISPI_VBE_ENABLED 0x40
#define VBE_DISPI_NOCLEARMEM 0x80
-
+
#define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000
API
---
- The display api works by using a index (VBE_DISPI_IOPORT_INDEX) and
+ The display api works by using a index (VBE_DISPI_IOPORT_INDEX) and
data (VBE_DISPI_IOPORT_DATA) ioport. One writes the index of the parameter to the index port.
Next, the parameter value can be read or written.
@@ -128,41 +135,41 @@ API
display code is present.
As a result, a PANIC can be generated if an incompatible vbebios/display code combination is detected.
This panic can be generated from the bochs display code (NOT the bios, see Notes).
-
+
Example values: VBE_DISPI_ID0
-
+
* VBE_DISPI_INDEX_XRES : WORD {R,W}
This parameter can be used to read/write the vbe display X resolution (in pixels).
It's illegal to set the XRES when the VBE is enabled (display code should generate PANIC).
-
+
If the value written exceeds VBE_DISPI_MAX_XRES, the display code needs to generate a PANIC.
-
+
Example values: 320,640,800,1024
* VBE_DISPI_INDEX_YRES : WORD {R,W}
This parameter can be used to read/write the vbe display Y resolution (in pixels).
It's illegal to set the YRES when the VBE is enabled (display code should generate PANIC).
-
+
If the value written exceeds VBE_DISPI_MAX_YRES, the display code needs to generate a PANIC.
-
+
Example values: 200,400,480,600,768
-
+
* VBE_DISPI_INDEX_BPP : WORD {R,W}
This parameter can be used to read/write the vbe display BPP.
It's illegal to set the BPP when the VBE is enabled (display code should generate PANIC).
-
+
If the value written is an incompatible BPP, the display code needs to generate a PANIC.
-
+
Example values: VBE_DISPI_BPP_8
-
+
* VBE_DISPI_INDEX_ENABLE : WORD {R,W}
This parameter can be used to read/write the vbe ENABLED state.
- If the bios writes VBE_DISPI_ENABLED then the display code will setup a hostside display mode
+ If the bios writes VBE_DISPI_ENABLED then the display code will setup a hostside display mode
with the current XRES, YRES and BPP settings.
If the bios write VBE_DISPI_DISABLED then the display code will switch back to normal vga mode behaviour.
-
+
Example values: VBE_DISPI_ENABLED, VBE_DISPI_DISABLED
-
+
* VBE_DISPI_INDEX_BANK : WORD {R,W}
This parameter can be used to read/write the current selected BANK (at 0xA0000).
This can be used for switching banks in banked mode.
@@ -173,11 +180,11 @@ API
Upon enabling a mode, this will be set to the current xres
Setting this field during enabled mode will result in the virtual width to be changed.
Value will be adjusted if current setting is not possible.
-
+
* VBE_DISPI_INDEX_VIRT_HEIGHT : WORD {R}
This parameter can be read in order to obtain the current virtual height.
This setting will be adjusted after setting a virtual width in order to stay within limit of video memory.
-
+
* VBE_DISPI_INDEX_X_OFFSET : WORD {R,W}
The current X offset (in pixels!) of the visible screen part.
Writing a new offset will also result in a complete screen refresh.
@@ -202,6 +209,9 @@ API
return the gui capabilities.
The new flag VBE_DISPI_8BIT_DAC switches the DAC to 8 bit mode.
+[0xb0c4]
+ * VBE_DISPI_TOTAL_VIDEO_MEMORY_MB set to 8 (moved to auto-generated vbetables.h)
+
Displaying GFX (banked mode)
--------------
What happens is that the total screen is devided in banks of 'VBE_DISPI_BANK_SIZE_KB' KiloByte in size.
@@ -219,7 +229,7 @@ Displaying GFX (linear frame buffer mode)
NOT WRITTEN YET
Notes
------
+-----
* Since the XRES/YRES/BPP may not be written when VBE is enabled, if you want to switch from one VBE mode
to another, you will need to disable VBE first.
diff --git a/tools/firmware/vgabios/vbetables-gen.c b/tools/firmware/vgabios/vbetables-gen.c
new file mode 100644
index 0000000000..7014a16e77
--- /dev/null
+++ b/tools/firmware/vgabios/vbetables-gen.c
@@ -0,0 +1,240 @@
+/* Generate the VGABIOS VBE Tables */
+#include <stdlib.h>
+#include <stdio.h>
+
+#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8
+
+typedef struct {
+ int width;
+ int height;
+ int depth;
+ int mode;
+} ModeInfo;
+
+ModeInfo modes[] = {
+ /* standard VESA modes */
+{ 640, 400, 8 , 0x100},
+{ 640, 480, 8 , 0x101},
+{ 800, 600, 4 , 0x102},
+{ 800, 600, 8 , 0x103},
+{ 1024, 768, 4 , 0x104},
+{ 1024, 768, 8 , 0x105},
+{ 1280, 1024, 4 , 0x106},
+{ 1280, 1024, 8 , 0x107},
+{ 320, 200, 15 , 0x10D},
+{ 320, 200, 16 , 0x10E},
+{ 320, 200, 24 , 0x10F},
+{ 640, 480, 15 , 0x110},
+{ 640, 480, 16 , 0x111},
+{ 640, 480, 24 , 0x112},
+{ 800, 600, 15 , 0x113},
+{ 800, 600, 16 , 0x114},
+{ 800, 600, 24 , 0x115},
+{ 1024, 768, 15 , 0x116},
+{ 1024, 768, 16 , 0x117},
+{ 1024, 768, 24 , 0x118},
+{ 1280, 1024, 15 , 0x119},
+{ 1280, 1024, 16 , 0x11A},
+{ 1280, 1024, 24 , 0x11B},
+{ 1600, 1200, 8 , 0x11C},
+{ 1600, 1200, 15 , 0x11D},
+{ 1600, 1200, 16 , 0x11E},
+{ 1600, 1200, 24 , 0x11F},
+
+ /* BOCHS/PLE, 86 'own' mode numbers */
+{ 320, 200, 32 , 0x140},
+{ 640, 400, 32 , 0x141},
+{ 640, 480, 32 , 0x142},
+{ 800, 600, 32 , 0x143},
+{ 1024, 768, 32 , 0x144},
+{ 1280, 1024, 32 , 0x145},
+{ 320, 200, 8 , 0x146},
+{ 1600, 1200, 32 , 0x147},
+{ 1152, 864, 8 , 0x148},
+{ 1152, 864, 15 , 0x149},
+{ 1152, 864, 16 , 0x14a},
+{ 1152, 864, 24 , 0x14b},
+{ 1152, 864, 32 , 0x14c},
+{ 0, },
+};
+
+int main(int argc, char **argv)
+{
+ const ModeInfo *pm;
+ int pages, pitch;
+ int r_size, r_pos, g_size, g_pos, b_size, b_pos, a_size, a_pos;
+ const char *str;
+ long vram_size = VBE_DISPI_TOTAL_VIDEO_MEMORY_MB * 1024 * 1024;
+
+ printf("/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */\n\n");
+ printf("#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB %d\n\n", VBE_DISPI_TOTAL_VIDEO_MEMORY_MB);
+ printf("static ModeInfoListItem mode_info_list[]=\n");
+ printf("{\n");
+ for (pm = modes; pm->mode != 0; pm++) {
+ if (pm->depth == 4)
+ pitch = (pm->width + 7) / 8;
+ else
+ pitch = pm->width * ((pm->depth + 7) / 8);
+ pages = vram_size / (pm->height * pitch);
+ if (pages > 0) {
+ printf("{ 0x%04x, /* %dx%dx%d */\n",
+ pm->mode, pm->width, pm->height, pm->depth);
+ if (pm->depth == 4)
+ printf("{ /*Bit16u ModeAttributes*/ %s,\n",
+ "VBE_MODE_ATTRIBUTE_SUPPORTED | "
+ "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
+ "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
+ "VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT | "
+ "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
+ else
+ printf("{ /*Bit16u ModeAttributes*/ %s,\n",
+ "VBE_MODE_ATTRIBUTE_SUPPORTED | "
+ "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
+ "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
+ "VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | "
+ "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
+ printf("/*Bit8u WinAAttributes*/ %s,\n",
+ "VBE_WINDOW_ATTRIBUTE_RELOCATABLE | "
+ "VBE_WINDOW_ATTRIBUTE_READABLE | "
+ "VBE_WINDOW_ATTRIBUTE_WRITEABLE");
+
+ printf("/*Bit8u WinBAttributes*/ %d,\n", 0);
+
+ printf("/*Bit16u WinGranularity*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
+
+ printf("/*Bit16u WinSize*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
+
+ printf("/*Bit16u WinASegment*/ %s,\n", "VGAMEM_GRAPH");
+
+ printf("/*Bit16u WinBSegment*/ 0x%04x,\n", 0);
+
+ printf("/*Bit32u WinFuncPtr*/ %d,\n", 0);
+
+ printf("/*Bit16u BytesPerScanLine*/ %d,\n", pitch);
+
+ // Mandatory information for VBE 1.2 and above
+ printf("/*Bit16u XResolution*/ %d,\n", pm->width);
+ printf("/*Bit16u YResolution*/ %d,\n", pm->height);
+ printf("/*Bit8u XCharSize*/ %d,\n", 8);
+ printf("/*Bit8u YCharSize*/ %d,\n", 16);
+ if (pm->depth == 4) {
+ printf("/*Bit8u NumberOfPlanes*/ %d,\n", 4);
+ } else {
+ printf("/*Bit8u NumberOfPlanes*/ %d,\n", 1);
+ }
+ printf("/*Bit8u BitsPerPixel*/ %d,\n", pm->depth);
+ printf("/*Bit8u NumberOfBanks*/ %d,\n",
+ (pm->height * pitch + 65535) / 65536);
+
+ if (pm->depth == 4)
+ str = "VBE_MEMORYMODEL_PLANAR";
+ else if (pm->depth == 8)
+ str = "VBE_MEMORYMODEL_PACKED_PIXEL";
+ else
+ str = "VBE_MEMORYMODEL_DIRECT_COLOR";
+ printf("/*Bit8u MemoryModel*/ %s,\n", str);
+ printf("/*Bit8u BankSize*/ %d,\n", 0);
+ if (pm->depth == 4)
+ printf("/*Bit8u NumberOfImagePages*/ %d,\n", (pages / 4) - 1);
+ else
+ printf("/*Bit8u NumberOfImagePages*/ %d,\n", pages - 1);
+ printf("/*Bit8u Reserved_page*/ %d,\n", 0);
+
+ // Direct Color fields (required for direct/6 and YUV/7 memory models)
+ switch(pm->depth) {
+ case 15:
+ r_size = 5;
+ r_pos = 10;
+ g_size = 5;
+ g_pos = 5;
+ b_size = 5;
+ b_pos = 0;
+ a_size = 1;
+ a_pos = 15;
+ break;
+ case 16:
+ r_size = 5;
+ r_pos = 11;
+ g_size = 6;
+ g_pos = 5;
+ b_size = 5;
+ b_pos = 0;
+ a_size = 0;
+ a_pos = 0;
+ break;
+ case 24:
+ r_size = 8;
+ r_pos = 16;
+ g_size = 8;
+ g_pos = 8;
+ b_size = 8;
+ b_pos = 0;
+ a_size = 0;
+ a_pos = 0;
+ break;
+ case 32:
+ r_size = 8;
+ r_pos = 16;
+ g_size = 8;
+ g_pos = 8;
+ b_size = 8;
+ b_pos = 0;
+ a_size = 8;
+ a_pos = 24;
+ break;
+ default:
+ r_size = 0;
+ r_pos = 0;
+ g_size = 0;
+ g_pos = 0;
+ b_size = 0;
+ b_pos = 0;
+ a_size = 0;
+ a_pos = 0;
+ break;
+ }
+
+ printf("/*Bit8u RedMaskSize*/ %d,\n", r_size);
+ printf("/*Bit8u RedFieldPosition*/ %d,\n", r_pos);
+ printf("/*Bit8u GreenMaskSize*/ %d,\n", g_size);
+ printf("/*Bit8u GreenFieldPosition*/ %d,\n", g_pos);
+ printf("/*Bit8u BlueMaskSize*/ %d,\n", b_size);
+ printf("/*Bit8u BlueFieldPosition*/ %d,\n", b_pos);
+ printf("/*Bit8u RsvdMaskSize*/ %d,\n", a_size);
+ printf("/*Bit8u RsvdFieldPosition*/ %d,\n", a_pos);
+ if (pm->depth == 32)
+ printf("/*Bit8u DirectColorModeInfo*/ %s,\n",
+ "VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE");
+ else
+ printf("/*Bit8u DirectColorModeInfo*/ %s,\n", "0");
+
+// Mandatory information for VBE 2.0 and above
+ if (pm->depth > 4)
+ printf("/*Bit32u PhysBasePtr*/ %s,\n",
+ "VBE_DISPI_LFB_PHYSICAL_ADDRESS");
+ else
+ printf("/*Bit32u PhysBasePtr*/ %s,\n", "0");
+ printf("/*Bit32u OffScreenMemOffset*/ %d,\n", 0);
+ printf("/*Bit16u OffScreenMemSize*/ %d,\n", 0);
+ // Mandatory information for VBE 3.0 and above
+ printf("/*Bit16u LinBytesPerScanLine*/ %d,\n", pitch);
+ printf("/*Bit8u BnkNumberOfPages*/ %d,\n", 0);
+ printf("/*Bit8u LinNumberOfPages*/ %d,\n", 0);
+ printf("/*Bit8u LinRedMaskSize*/ %d,\n", r_size);
+ printf("/*Bit8u LinRedFieldPosition*/ %d,\n", r_pos);
+ printf("/*Bit8u LinGreenMaskSize*/ %d,\n", g_size);
+ printf("/*Bit8u LinGreenFieldPosition*/ %d,\n", g_pos);
+ printf("/*Bit8u LinBlueMaskSize*/ %d,\n", b_size);
+ printf("/*Bit8u LinBlueFieldPosition*/ %d,\n", b_pos);
+ printf("/*Bit8u LinRsvdMaskSize*/ %d,\n", a_size);
+ printf("/*Bit8u LinRsvdFieldPosition*/ %d,\n", a_pos);
+ printf("/*Bit32u MaxPixelClock*/ %d,\n", 0);
+ printf("} },\n");
+ }
+ }
+ printf("{ VBE_VESA_MODE_END_OF_LIST,\n");
+ printf("{ 0,\n");
+ printf("} },\n");
+ printf("};\n");
+ return 0;
+}
diff --git a/tools/firmware/vgabios/vbetables.h b/tools/firmware/vgabios/vbetables.h
index a742ac74ba..2912641ded 100644
--- a/tools/firmware/vgabios/vbetables.h
+++ b/tools/firmware/vgabios/vbetables.h
@@ -1,1282 +1,1850 @@
-#ifndef vbetables_h_included
-#define vbetables_h_included
+/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */
-/* vbetables.h
+#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8
- This file contains a static mode information list containing all
- bochs/plex86 "supported" VBE modi and their 'settings'.
-
-*/
-
-typedef struct ModeInfoListItem
-{
- Bit16u mode;
- ModeInfoBlockCompact info;
-} ModeInfoListItem;
-
-// FIXME: check all member variables to be correct for the different modi
-// FIXME: add more modi
static ModeInfoListItem mode_info_list[]=
{
- {
- VBE_VESA_MODE_640X400X8,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 640,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 640,
- /*Bit16u YResolution*/ 400,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 8,
- /*Bit8u NumberOfBanks*/ 4, // 640x400/64kb == 4
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 15,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 0,
- /*Bit8u RedFieldPosition*/ 0,
- /*Bit8u GreenMaskSize*/ 0,
- /*Bit8u GreenFieldPosition*/ 0,
- /*Bit8u BlueMaskSize*/ 0,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 640,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 0,
- /*Bit8u LinRedFieldPosition*/ 0,
- /*Bit8u LinGreenMaskSize*/ 0,
- /*Bit8u LinGreenFieldPosition*/ 0,
- /*Bit8u LinBlueMaskSize*/ 0,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_640X480X8,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 640,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 640,
- /*Bit16u YResolution*/ 480,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 8,
- /*Bit8u NumberOfBanks*/ 5, // 640x480/64kb == 5
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 11,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 0,
- /*Bit8u RedFieldPosition*/ 0,
- /*Bit8u GreenMaskSize*/ 0,
- /*Bit8u GreenFieldPosition*/ 0,
- /*Bit8u BlueMaskSize*/ 0,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 640,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 0,
- /*Bit8u LinRedFieldPosition*/ 0,
- /*Bit8u LinGreenMaskSize*/ 0,
- /*Bit8u LinGreenFieldPosition*/ 0,
- /*Bit8u LinBlueMaskSize*/ 0,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_800X600X4,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 100,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 800,
- /*Bit16u YResolution*/ 600,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 4,
- /*Bit8u BitsPerPixel*/ 4,
- /*Bit8u NumberOfBanks*/ 16,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PLANAR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 15,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 0,
- /*Bit8u RedFieldPosition*/ 0,
- /*Bit8u GreenMaskSize*/ 0,
- /*Bit8u GreenFieldPosition*/ 0,
- /*Bit8u BlueMaskSize*/ 0,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
- /*Bit32u PhysBasePtr*/ 0,
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 100,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 0,
- /*Bit8u LinRedFieldPosition*/ 0,
- /*Bit8u LinGreenMaskSize*/ 0,
- /*Bit8u LinGreenFieldPosition*/ 0,
- /*Bit8u LinBlueMaskSize*/ 0,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_800X600X8,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 800,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 800,
- /*Bit16u YResolution*/ 600,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 8,
- /*Bit8u NumberOfBanks*/ 8, // 800x600/64kb == 8
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 7,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 0,
- /*Bit8u RedFieldPosition*/ 0,
- /*Bit8u GreenMaskSize*/ 0,
- /*Bit8u GreenFieldPosition*/ 0,
- /*Bit8u BlueMaskSize*/ 0,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 800,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 0,
- /*Bit8u LinRedFieldPosition*/ 0,
- /*Bit8u LinGreenMaskSize*/ 0,
- /*Bit8u LinGreenFieldPosition*/ 0,
- /*Bit8u LinBlueMaskSize*/ 0,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_1024X768X8,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 1024,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 1024,
- /*Bit16u YResolution*/ 768,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 8,
- /*Bit8u NumberOfBanks*/ 12, // 1024x768/64kb == 12
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 3,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 0,
- /*Bit8u RedFieldPosition*/ 0,
- /*Bit8u GreenMaskSize*/ 0,
- /*Bit8u GreenFieldPosition*/ 0,
- /*Bit8u BlueMaskSize*/ 0,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 1024,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 0,
- /*Bit8u LinRedFieldPosition*/ 0,
- /*Bit8u LinGreenMaskSize*/ 0,
- /*Bit8u LinGreenFieldPosition*/ 0,
- /*Bit8u LinBlueMaskSize*/ 0,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_640X480X1555,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 640*2,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 640,
- /*Bit16u YResolution*/ 480,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 15,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 5,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 5,
- /*Bit8u RedFieldPosition*/ 10,
- /*Bit8u GreenMaskSize*/ 5,
- /*Bit8u GreenFieldPosition*/ 5,
- /*Bit8u BlueMaskSize*/ 5,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 1,
- /*Bit8u RsvdFieldPosition*/ 15,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 640*2,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 5,
- /*Bit8u LinRedFieldPosition*/ 10,
- /*Bit8u LinGreenMaskSize*/ 0,
- /*Bit8u LinGreenFieldPosition*/ 5,
- /*Bit8u LinBlueMaskSize*/ 5,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 1,
- /*Bit8u LinRsvdFieldPosition*/ 15,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_800X600X1555,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 800*2,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 800,
- /*Bit16u YResolution*/ 600,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 15,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 3,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 5,
- /*Bit8u RedFieldPosition*/ 10,
- /*Bit8u GreenMaskSize*/ 5,
- /*Bit8u GreenFieldPosition*/ 5,
- /*Bit8u BlueMaskSize*/ 5,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 1,
- /*Bit8u RsvdFieldPosition*/ 15,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 800*2,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 5,
- /*Bit8u LinRedFieldPosition*/ 10,
- /*Bit8u LinGreenMaskSize*/ 5,
- /*Bit8u LinGreenFieldPosition*/ 5,
- /*Bit8u LinBlueMaskSize*/ 5,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 1,
- /*Bit8u LinRsvdFieldPosition*/ 15,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_1024X768X1555,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 1024*2,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 1024,
- /*Bit16u YResolution*/ 768,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 15,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 1,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 5,
- /*Bit8u RedFieldPosition*/ 10,
- /*Bit8u GreenMaskSize*/ 5,
- /*Bit8u GreenFieldPosition*/ 5,
- /*Bit8u BlueMaskSize*/ 5,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 1,
- /*Bit8u RsvdFieldPosition*/ 15,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 1024*2,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 5,
- /*Bit8u LinRedFieldPosition*/ 10,
- /*Bit8u LinGreenMaskSize*/ 5,
- /*Bit8u LinGreenFieldPosition*/ 5,
- /*Bit8u LinBlueMaskSize*/ 5,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 1,
- /*Bit8u LinRsvdFieldPosition*/ 15,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_640X480X565,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 640*2,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 640,
- /*Bit16u YResolution*/ 480,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 16,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 5,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 5,
- /*Bit8u RedFieldPosition*/ 11,
- /*Bit8u GreenMaskSize*/ 6,
- /*Bit8u GreenFieldPosition*/ 5,
- /*Bit8u BlueMaskSize*/ 5,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 640*2,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 5,
- /*Bit8u LinRedFieldPosition*/ 11,
- /*Bit8u LinGreenMaskSize*/ 6,
- /*Bit8u LinGreenFieldPosition*/ 5,
- /*Bit8u LinBlueMaskSize*/ 5,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_800X600X565,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 800*2,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 800,
- /*Bit16u YResolution*/ 600,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 16,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 3,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 5,
- /*Bit8u RedFieldPosition*/ 11,
- /*Bit8u GreenMaskSize*/ 6,
- /*Bit8u GreenFieldPosition*/ 5,
- /*Bit8u BlueMaskSize*/ 5,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 800*2,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 5,
- /*Bit8u LinRedFieldPosition*/ 11,
- /*Bit8u LinGreenMaskSize*/ 6,
- /*Bit8u LinGreenFieldPosition*/ 5,
- /*Bit8u LinBlueMaskSize*/ 5,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_1024X768X565,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 1024*2,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 1024,
- /*Bit16u YResolution*/ 768,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 16,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 1,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 5,
- /*Bit8u RedFieldPosition*/ 11,
- /*Bit8u GreenMaskSize*/ 6,
- /*Bit8u GreenFieldPosition*/ 5,
- /*Bit8u BlueMaskSize*/ 5,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 1024*2,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 5,
- /*Bit8u LinRedFieldPosition*/ 11,
- /*Bit8u LinGreenMaskSize*/ 6,
- /*Bit8u LinGreenFieldPosition*/ 5,
- /*Bit8u LinBlueMaskSize*/ 5,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_640X480X888,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 640*3,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 640,
- /*Bit16u YResolution*/ 480,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 24,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 3,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 8,
- /*Bit8u RedFieldPosition*/ 16,
- /*Bit8u GreenMaskSize*/ 8,
- /*Bit8u GreenFieldPosition*/ 8,
- /*Bit8u BlueMaskSize*/ 8,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 640*3,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 8,
- /*Bit8u LinRedFieldPosition*/ 16,
- /*Bit8u LinGreenMaskSize*/ 8,
- /*Bit8u LinGreenFieldPosition*/ 8,
- /*Bit8u LinBlueMaskSize*/ 8,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_800X600X888,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 800*3,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 800,
- /*Bit16u YResolution*/ 600,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 24,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 1,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 8,
- /*Bit8u RedFieldPosition*/ 16,
- /*Bit8u GreenMaskSize*/ 8,
- /*Bit8u GreenFieldPosition*/ 8,
- /*Bit8u BlueMaskSize*/ 8,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 800*3,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 8,
- /*Bit8u LinRedFieldPosition*/ 16,
- /*Bit8u LinGreenMaskSize*/ 8,
- /*Bit8u LinGreenFieldPosition*/ 8,
- /*Bit8u LinBlueMaskSize*/ 8,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_VESA_MODE_1024X768X888,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 1024*3,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 1024,
- /*Bit16u YResolution*/ 768,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 24,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 0,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 8,
- /*Bit8u RedFieldPosition*/ 16,
- /*Bit8u GreenMaskSize*/ 8,
- /*Bit8u GreenFieldPosition*/ 8,
- /*Bit8u BlueMaskSize*/ 8,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 1024*3,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 8,
- /*Bit8u LinRedFieldPosition*/ 16,
- /*Bit8u LinGreenMaskSize*/ 8,
- /*Bit8u LinGreenFieldPosition*/ 8,
- /*Bit8u LinBlueMaskSize*/ 8,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_OWN_MODE_640X480X8888,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 640*4,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 640,
- /*Bit16u YResolution*/ 480,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 32,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 1,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 8,
- /*Bit8u RedFieldPosition*/ 16,
- /*Bit8u GreenMaskSize*/ 8,
- /*Bit8u GreenFieldPosition*/ 8,
- /*Bit8u BlueMaskSize*/ 8,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 8,
- /*Bit8u RsvdFieldPosition*/ 24,
- /*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 640*4,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 8,
- /*Bit8u LinRedFieldPosition*/ 16,
- /*Bit8u LinGreenMaskSize*/ 8,
- /*Bit8u LinGreenFieldPosition*/ 8,
- /*Bit8u LinBlueMaskSize*/ 8,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 8,
- /*Bit8u LinRsvdFieldPosition*/ 24,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_OWN_MODE_800X600X8888,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 800*4,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 800,
- /*Bit16u YResolution*/ 600,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 32,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 1,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 8,
- /*Bit8u RedFieldPosition*/ 16,
- /*Bit8u GreenMaskSize*/ 8,
- /*Bit8u GreenFieldPosition*/ 8,
- /*Bit8u BlueMaskSize*/ 8,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 8,
- /*Bit8u RsvdFieldPosition*/ 24,
- /*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 800*4,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 8,
- /*Bit8u LinRedFieldPosition*/ 16,
- /*Bit8u LinGreenMaskSize*/ 8,
- /*Bit8u LinGreenFieldPosition*/ 8,
- /*Bit8u LinBlueMaskSize*/ 8,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 8,
- /*Bit8u LinRsvdFieldPosition*/ 24,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_OWN_MODE_1024X768X8888,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
- VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 1024*4,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 1024,
- /*Bit16u YResolution*/ 768,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 32,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 1,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 8,
- /*Bit8u RedFieldPosition*/ 16,
- /*Bit8u GreenMaskSize*/ 8,
- /*Bit8u GreenFieldPosition*/ 8,
- /*Bit8u BlueMaskSize*/ 8,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 8,
- /*Bit8u RsvdFieldPosition*/ 24,
- /*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 1024*4,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 8,
- /*Bit8u LinRedFieldPosition*/ 16,
- /*Bit8u LinGreenMaskSize*/ 8,
- /*Bit8u LinGreenFieldPosition*/ 8,
- /*Bit8u LinBlueMaskSize*/ 8,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 8,
- /*Bit8u LinRsvdFieldPosition*/ 24,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
- {
- VBE_OWN_MODE_320X200X8,
- {
-/*typedef struct ModeInfoBlock
-{*/
-// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
- VBE_MODE_ATTRIBUTE_COLOR_MODE |
-#ifdef VBE_HAVE_LFB
- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
-#endif
- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE,
- /*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
- /*Bit16u WinASegment*/ VGAMEM_GRAPH,
- /*Bit16u WinBSegment*/ 0,
- /*Bit32u WinFuncPtr*/ 0,
- /*Bit16u BytesPerScanLine*/ 320,
-// Mandatory information for VBE 1.2 and above
- /*Bit16u XResolution*/ 320,
- /*Bit16u YResolution*/ 200,
- /*Bit8u XCharSize*/ 8,
- /*Bit8u YCharSize*/ 16,
- /*Bit8u NumberOfPlanes*/ 1,
- /*Bit8u BitsPerPixel*/ 8,
- /*Bit8u NumberOfBanks*/ 1,
- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
- /*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 3,
- /*Bit8u Reserved_page*/ 0,
-// Direct Color fields (required for direct/6 and YUV/7 memory models)
- /*Bit8u RedMaskSize*/ 0,
- /*Bit8u RedFieldPosition*/ 0,
- /*Bit8u GreenMaskSize*/ 0,
- /*Bit8u GreenFieldPosition*/ 0,
- /*Bit8u BlueMaskSize*/ 0,
- /*Bit8u BlueFieldPosition*/ 0,
- /*Bit8u RsvdMaskSize*/ 0,
- /*Bit8u RsvdFieldPosition*/ 0,
- /*Bit8u DirectColorModeInfo*/ 0,
-// Mandatory information for VBE 2.0 and above
-#ifdef VBE_HAVE_LFB
- /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-#else
- /*Bit32u PhysBasePtr*/ 0,
-#endif
- /*Bit32u OffScreenMemOffset*/ 0,
- /*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
- /*Bit16u LinBytesPerScanLine*/ 320,
- /*Bit8u BnkNumberOfPages*/ 0,
- /*Bit8u LinNumberOfPages*/ 0,
- /*Bit8u LinRedMaskSize*/ 0,
- /*Bit8u LinRedFieldPosition*/ 0,
- /*Bit8u LinGreenMaskSize*/ 0,
- /*Bit8u LinGreenFieldPosition*/ 0,
- /*Bit8u LinBlueMaskSize*/ 0,
- /*Bit8u LinBlueFieldPosition*/ 0,
- /*Bit8u LinRsvdMaskSize*/ 0,
- /*Bit8u LinRsvdFieldPosition*/ 0,
- /*Bit32u MaxPixelClock*/ 0,
-/*} ModeInfoBlock;*/
- }
- },
-
-/** END OF THE LIST **/
- {
- VBE_VESA_MODE_END_OF_LIST,
- {
- 0,
- }
- }
+{ 0x0100, /* 640x400x8 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 640,
+/*Bit16u XResolution*/ 640,
+/*Bit16u YResolution*/ 400,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 8,
+/*Bit8u NumberOfBanks*/ 4,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 31,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 640,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0101, /* 640x480x8 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 640,
+/*Bit16u XResolution*/ 640,
+/*Bit16u YResolution*/ 480,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 8,
+/*Bit8u NumberOfBanks*/ 5,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 26,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 640,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0102, /* 800x600x4 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 100,
+/*Bit16u XResolution*/ 800,
+/*Bit16u YResolution*/ 600,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 4,
+/*Bit8u BitsPerPixel*/ 4,
+/*Bit8u NumberOfBanks*/ 1,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PLANAR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 33,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ 0,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 100,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0103, /* 800x600x8 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 800,
+/*Bit16u XResolution*/ 800,
+/*Bit16u YResolution*/ 600,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 8,
+/*Bit8u NumberOfBanks*/ 8,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 16,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 800,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0104, /* 1024x768x4 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 128,
+/*Bit16u XResolution*/ 1024,
+/*Bit16u YResolution*/ 768,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 4,
+/*Bit8u BitsPerPixel*/ 4,
+/*Bit8u NumberOfBanks*/ 2,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PLANAR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 20,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ 0,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 128,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0105, /* 1024x768x8 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1024,
+/*Bit16u XResolution*/ 1024,
+/*Bit16u YResolution*/ 768,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 8,
+/*Bit8u NumberOfBanks*/ 12,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 9,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1024,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0106, /* 1280x1024x4 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 160,
+/*Bit16u XResolution*/ 1280,
+/*Bit16u YResolution*/ 1024,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 4,
+/*Bit8u BitsPerPixel*/ 4,
+/*Bit8u NumberOfBanks*/ 3,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PLANAR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 11,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ 0,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 160,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0107, /* 1280x1024x8 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1280,
+/*Bit16u XResolution*/ 1280,
+/*Bit16u YResolution*/ 1024,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 8,
+/*Bit8u NumberOfBanks*/ 20,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 5,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1280,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x010d, /* 320x200x15 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 640,
+/*Bit16u XResolution*/ 320,
+/*Bit16u YResolution*/ 200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 15,
+/*Bit8u NumberOfBanks*/ 2,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 64,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 10,
+/*Bit8u GreenMaskSize*/ 5,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 1,
+/*Bit8u RsvdFieldPosition*/ 15,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 640,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 10,
+/*Bit8u LinGreenMaskSize*/ 5,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 1,
+/*Bit8u LinRsvdFieldPosition*/ 15,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x010e, /* 320x200x16 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 640,
+/*Bit16u XResolution*/ 320,
+/*Bit16u YResolution*/ 200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 16,
+/*Bit8u NumberOfBanks*/ 2,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 64,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 11,
+/*Bit8u GreenMaskSize*/ 6,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 640,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 11,
+/*Bit8u LinGreenMaskSize*/ 6,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x010f, /* 320x200x24 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 960,
+/*Bit16u XResolution*/ 320,
+/*Bit16u YResolution*/ 200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 24,
+/*Bit8u NumberOfBanks*/ 3,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 42,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 960,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0110, /* 640x480x15 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1280,
+/*Bit16u XResolution*/ 640,
+/*Bit16u YResolution*/ 480,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 15,
+/*Bit8u NumberOfBanks*/ 10,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 12,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 10,
+/*Bit8u GreenMaskSize*/ 5,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 1,
+/*Bit8u RsvdFieldPosition*/ 15,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1280,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 10,
+/*Bit8u LinGreenMaskSize*/ 5,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 1,
+/*Bit8u LinRsvdFieldPosition*/ 15,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0111, /* 640x480x16 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1280,
+/*Bit16u XResolution*/ 640,
+/*Bit16u YResolution*/ 480,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 16,
+/*Bit8u NumberOfBanks*/ 10,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 12,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 11,
+/*Bit8u GreenMaskSize*/ 6,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1280,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 11,
+/*Bit8u LinGreenMaskSize*/ 6,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0112, /* 640x480x24 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1920,
+/*Bit16u XResolution*/ 640,
+/*Bit16u YResolution*/ 480,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 24,
+/*Bit8u NumberOfBanks*/ 15,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 8,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1920,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0113, /* 800x600x15 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1600,
+/*Bit16u XResolution*/ 800,
+/*Bit16u YResolution*/ 600,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 15,
+/*Bit8u NumberOfBanks*/ 15,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 7,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 10,
+/*Bit8u GreenMaskSize*/ 5,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 1,
+/*Bit8u RsvdFieldPosition*/ 15,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1600,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 10,
+/*Bit8u LinGreenMaskSize*/ 5,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 1,
+/*Bit8u LinRsvdFieldPosition*/ 15,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0114, /* 800x600x16 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1600,
+/*Bit16u XResolution*/ 800,
+/*Bit16u YResolution*/ 600,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 16,
+/*Bit8u NumberOfBanks*/ 15,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 7,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 11,
+/*Bit8u GreenMaskSize*/ 6,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1600,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 11,
+/*Bit8u LinGreenMaskSize*/ 6,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0115, /* 800x600x24 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 2400,
+/*Bit16u XResolution*/ 800,
+/*Bit16u YResolution*/ 600,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 24,
+/*Bit8u NumberOfBanks*/ 22,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 4,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 2400,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0116, /* 1024x768x15 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 2048,
+/*Bit16u XResolution*/ 1024,
+/*Bit16u YResolution*/ 768,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 15,
+/*Bit8u NumberOfBanks*/ 24,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 4,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 10,
+/*Bit8u GreenMaskSize*/ 5,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 1,
+/*Bit8u RsvdFieldPosition*/ 15,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 2048,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 10,
+/*Bit8u LinGreenMaskSize*/ 5,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 1,
+/*Bit8u LinRsvdFieldPosition*/ 15,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0117, /* 1024x768x16 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 2048,
+/*Bit16u XResolution*/ 1024,
+/*Bit16u YResolution*/ 768,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 16,
+/*Bit8u NumberOfBanks*/ 24,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 4,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 11,
+/*Bit8u GreenMaskSize*/ 6,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 2048,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 11,
+/*Bit8u LinGreenMaskSize*/ 6,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0118, /* 1024x768x24 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 3072,
+/*Bit16u XResolution*/ 1024,
+/*Bit16u YResolution*/ 768,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 24,
+/*Bit8u NumberOfBanks*/ 36,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 2,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 3072,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0119, /* 1280x1024x15 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 2560,
+/*Bit16u XResolution*/ 1280,
+/*Bit16u YResolution*/ 1024,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 15,
+/*Bit8u NumberOfBanks*/ 40,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 2,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 10,
+/*Bit8u GreenMaskSize*/ 5,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 1,
+/*Bit8u RsvdFieldPosition*/ 15,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 2560,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 10,
+/*Bit8u LinGreenMaskSize*/ 5,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 1,
+/*Bit8u LinRsvdFieldPosition*/ 15,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x011a, /* 1280x1024x16 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 2560,
+/*Bit16u XResolution*/ 1280,
+/*Bit16u YResolution*/ 1024,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 16,
+/*Bit8u NumberOfBanks*/ 40,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 2,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 11,
+/*Bit8u GreenMaskSize*/ 6,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 2560,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 11,
+/*Bit8u LinGreenMaskSize*/ 6,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x011b, /* 1280x1024x24 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 3840,
+/*Bit16u XResolution*/ 1280,
+/*Bit16u YResolution*/ 1024,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 24,
+/*Bit8u NumberOfBanks*/ 60,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 1,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 3840,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x011c, /* 1600x1200x8 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1600,
+/*Bit16u XResolution*/ 1600,
+/*Bit16u YResolution*/ 1200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 8,
+/*Bit8u NumberOfBanks*/ 30,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 3,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1600,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x011d, /* 1600x1200x15 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 3200,
+/*Bit16u XResolution*/ 1600,
+/*Bit16u YResolution*/ 1200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 15,
+/*Bit8u NumberOfBanks*/ 59,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 1,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 10,
+/*Bit8u GreenMaskSize*/ 5,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 1,
+/*Bit8u RsvdFieldPosition*/ 15,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 3200,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 10,
+/*Bit8u LinGreenMaskSize*/ 5,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 1,
+/*Bit8u LinRsvdFieldPosition*/ 15,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x011e, /* 1600x1200x16 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 3200,
+/*Bit16u XResolution*/ 1600,
+/*Bit16u YResolution*/ 1200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 16,
+/*Bit8u NumberOfBanks*/ 59,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 1,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 11,
+/*Bit8u GreenMaskSize*/ 6,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 3200,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 11,
+/*Bit8u LinGreenMaskSize*/ 6,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x011f, /* 1600x1200x24 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 4800,
+/*Bit16u XResolution*/ 1600,
+/*Bit16u YResolution*/ 1200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 24,
+/*Bit8u NumberOfBanks*/ 88,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 0,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 4800,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0140, /* 320x200x32 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1280,
+/*Bit16u XResolution*/ 320,
+/*Bit16u YResolution*/ 200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 32,
+/*Bit8u NumberOfBanks*/ 4,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 31,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 8,
+/*Bit8u RsvdFieldPosition*/ 24,
+/*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1280,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 8,
+/*Bit8u LinRsvdFieldPosition*/ 24,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0141, /* 640x400x32 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 2560,
+/*Bit16u XResolution*/ 640,
+/*Bit16u YResolution*/ 400,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 32,
+/*Bit8u NumberOfBanks*/ 16,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 7,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 8,
+/*Bit8u RsvdFieldPosition*/ 24,
+/*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 2560,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 8,
+/*Bit8u LinRsvdFieldPosition*/ 24,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0142, /* 640x480x32 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 2560,
+/*Bit16u XResolution*/ 640,
+/*Bit16u YResolution*/ 480,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 32,
+/*Bit8u NumberOfBanks*/ 19,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 5,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 8,
+/*Bit8u RsvdFieldPosition*/ 24,
+/*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 2560,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 8,
+/*Bit8u LinRsvdFieldPosition*/ 24,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0143, /* 800x600x32 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 3200,
+/*Bit16u XResolution*/ 800,
+/*Bit16u YResolution*/ 600,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 32,
+/*Bit8u NumberOfBanks*/ 30,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 3,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 8,
+/*Bit8u RsvdFieldPosition*/ 24,
+/*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 3200,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 8,
+/*Bit8u LinRsvdFieldPosition*/ 24,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0144, /* 1024x768x32 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 4096,
+/*Bit16u XResolution*/ 1024,
+/*Bit16u YResolution*/ 768,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 32,
+/*Bit8u NumberOfBanks*/ 48,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 1,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 8,
+/*Bit8u RsvdFieldPosition*/ 24,
+/*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 4096,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 8,
+/*Bit8u LinRsvdFieldPosition*/ 24,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0145, /* 1280x1024x32 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 5120,
+/*Bit16u XResolution*/ 1280,
+/*Bit16u YResolution*/ 1024,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 32,
+/*Bit8u NumberOfBanks*/ 80,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 0,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 8,
+/*Bit8u RsvdFieldPosition*/ 24,
+/*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 5120,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 8,
+/*Bit8u LinRsvdFieldPosition*/ 24,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0146, /* 320x200x8 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 320,
+/*Bit16u XResolution*/ 320,
+/*Bit16u YResolution*/ 200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 8,
+/*Bit8u NumberOfBanks*/ 1,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 130,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 320,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0147, /* 1600x1200x32 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 6400,
+/*Bit16u XResolution*/ 1600,
+/*Bit16u YResolution*/ 1200,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 32,
+/*Bit8u NumberOfBanks*/ 118,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 0,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 8,
+/*Bit8u RsvdFieldPosition*/ 24,
+/*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 6400,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 8,
+/*Bit8u LinRsvdFieldPosition*/ 24,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0148, /* 1152x864x8 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 1152,
+/*Bit16u XResolution*/ 1152,
+/*Bit16u YResolution*/ 864,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 8,
+/*Bit8u NumberOfBanks*/ 16,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 7,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 0,
+/*Bit8u RedFieldPosition*/ 0,
+/*Bit8u GreenMaskSize*/ 0,
+/*Bit8u GreenFieldPosition*/ 0,
+/*Bit8u BlueMaskSize*/ 0,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 1152,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 0,
+/*Bit8u LinRedFieldPosition*/ 0,
+/*Bit8u LinGreenMaskSize*/ 0,
+/*Bit8u LinGreenFieldPosition*/ 0,
+/*Bit8u LinBlueMaskSize*/ 0,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x0149, /* 1152x864x15 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 2304,
+/*Bit16u XResolution*/ 1152,
+/*Bit16u YResolution*/ 864,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 15,
+/*Bit8u NumberOfBanks*/ 31,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 3,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 10,
+/*Bit8u GreenMaskSize*/ 5,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 1,
+/*Bit8u RsvdFieldPosition*/ 15,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 2304,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 10,
+/*Bit8u LinGreenMaskSize*/ 5,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 1,
+/*Bit8u LinRsvdFieldPosition*/ 15,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x014a, /* 1152x864x16 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 2304,
+/*Bit16u XResolution*/ 1152,
+/*Bit16u YResolution*/ 864,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 16,
+/*Bit8u NumberOfBanks*/ 31,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 3,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 5,
+/*Bit8u RedFieldPosition*/ 11,
+/*Bit8u GreenMaskSize*/ 6,
+/*Bit8u GreenFieldPosition*/ 5,
+/*Bit8u BlueMaskSize*/ 5,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 2304,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 5,
+/*Bit8u LinRedFieldPosition*/ 11,
+/*Bit8u LinGreenMaskSize*/ 6,
+/*Bit8u LinGreenFieldPosition*/ 5,
+/*Bit8u LinBlueMaskSize*/ 5,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x014b, /* 1152x864x24 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 3456,
+/*Bit16u XResolution*/ 1152,
+/*Bit16u YResolution*/ 864,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 24,
+/*Bit8u NumberOfBanks*/ 46,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 1,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 0,
+/*Bit8u RsvdFieldPosition*/ 0,
+/*Bit8u DirectColorModeInfo*/ 0,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 3456,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 0,
+/*Bit8u LinRsvdFieldPosition*/ 0,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ 0x014c, /* 1152x864x32 */
+{ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,
+/*Bit8u WinBAttributes*/ 0,
+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
+/*Bit16u WinASegment*/ VGAMEM_GRAPH,
+/*Bit16u WinBSegment*/ 0x0000,
+/*Bit32u WinFuncPtr*/ 0,
+/*Bit16u BytesPerScanLine*/ 4608,
+/*Bit16u XResolution*/ 1152,
+/*Bit16u YResolution*/ 864,
+/*Bit8u XCharSize*/ 8,
+/*Bit8u YCharSize*/ 16,
+/*Bit8u NumberOfPlanes*/ 1,
+/*Bit8u BitsPerPixel*/ 32,
+/*Bit8u NumberOfBanks*/ 61,
+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+/*Bit8u BankSize*/ 0,
+/*Bit8u NumberOfImagePages*/ 1,
+/*Bit8u Reserved_page*/ 0,
+/*Bit8u RedMaskSize*/ 8,
+/*Bit8u RedFieldPosition*/ 16,
+/*Bit8u GreenMaskSize*/ 8,
+/*Bit8u GreenFieldPosition*/ 8,
+/*Bit8u BlueMaskSize*/ 8,
+/*Bit8u BlueFieldPosition*/ 0,
+/*Bit8u RsvdMaskSize*/ 8,
+/*Bit8u RsvdFieldPosition*/ 24,
+/*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,
+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+/*Bit32u OffScreenMemOffset*/ 0,
+/*Bit16u OffScreenMemSize*/ 0,
+/*Bit16u LinBytesPerScanLine*/ 4608,
+/*Bit8u BnkNumberOfPages*/ 0,
+/*Bit8u LinNumberOfPages*/ 0,
+/*Bit8u LinRedMaskSize*/ 8,
+/*Bit8u LinRedFieldPosition*/ 16,
+/*Bit8u LinGreenMaskSize*/ 8,
+/*Bit8u LinGreenFieldPosition*/ 8,
+/*Bit8u LinBlueMaskSize*/ 8,
+/*Bit8u LinBlueFieldPosition*/ 0,
+/*Bit8u LinRsvdMaskSize*/ 8,
+/*Bit8u LinRsvdFieldPosition*/ 24,
+/*Bit32u MaxPixelClock*/ 0,
+} },
+{ VBE_VESA_MODE_END_OF_LIST,
+{ 0,
+} },
};
-
-#endif
diff --git a/tools/firmware/vgabios/vgabios.c b/tools/firmware/vgabios/vgabios.c
index 1bca91962d..3fd9f2f680 100644
--- a/tools/firmware/vgabios/vgabios.c
+++ b/tools/firmware/vgabios/vgabios.c
@@ -4,7 +4,7 @@
*/
// ============================================================================================
//
-// Copyright (C) 2001,2002 the LGPL VGABios developers Team
+// Copyright (C) 2001-2008 the LGPL VGABios developers Team
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
@@ -54,7 +54,6 @@
#include "vbe.h"
#endif
-#undef DEBUG
#define USE_BX_INFO
/* Declares */
@@ -110,8 +109,9 @@ static void biosfn_enable_video_refresh_control();
static void biosfn_write_string();
static void biosfn_read_state_info();
static void biosfn_read_video_state_size();
-static void biosfn_save_video_state();
-static void biosfn_restore_video_state();
+static Bit16u biosfn_save_video_state();
+static Bit16u biosfn_restore_video_state();
+extern Bit8u video_save_pointer_table[];
// This is for compiling with gcc2 and gcc3
#define ASM_START #asm
@@ -149,16 +149,24 @@ vgabios_entry_point:
jmp vgabios_init_func
-vgabios_name:
-.ascii "Plex86/Bochs VGABios"
-.ascii " "
-.byte 0x00
+#ifdef PCIBIOS
+.org 0x18
+.word vgabios_pci_data
+#endif
// Info from Bart Oldeman
.org 0x1e
.ascii "IBM"
.byte 0x00
+vgabios_name:
+.ascii "Plex86/Bochs VGABios"
+#ifdef PCIBIOS
+.ascii " (PCI)"
+#endif
+.ascii " "
+.byte 0x00
+
vgabios_version:
#ifndef VGABIOS_VERS
.ascii "current-cvs"
@@ -173,7 +181,7 @@ vgabios_date:
.byte 0x00
vgabios_copyright:
-.ascii "(C) 2003 the LGPL VGABios developers Team"
+.ascii "(C) 2008 the LGPL VGABios developers Team"
.byte 0x0a,0x0d
.byte 0x00
@@ -194,7 +202,28 @@ vgabios_website:
.byte 0x0a,0x0d
.byte 0x0a,0x0d
.byte 0x00
-
+
+#ifdef PCIBIOS
+vgabios_pci_data:
+.ascii "PCIR"
+#ifdef CIRRUS
+.word 0x1013
+.word 0x00b8 // CLGD5446
+#else
+#error "Unknown PCI vendor and device id"
+#endif
+.word 0 // reserved
+.word 0x18 // dlen
+.byte 0 // revision
+.byte 0x0 // class,hi: vga display
+.word 0x300 // class,lo: vga display
+.word 0x40 // bios size
+.word 1 // revision
+.byte 0 // intel x86 data
+.byte 0x80 // last image
+.word 0 // reserved
+#endif
+
;; ============================================================================================
;;
@@ -348,9 +377,14 @@ int10_test_vbe_07:
jmp int10_end
int10_test_vbe_08:
cmp al, #0x08
- jne int10_normal
+ jne int10_test_vbe_0A
call vbe_biosfn_set_get_dac_palette_format
jmp int10_end
+int10_test_vbe_0A:
+ cmp al, #0x0A
+ jne int10_normal
+ call vbe_biosfn_return_protected_mode_interface
+ jmp int10_end
#endif
int10_normal:
@@ -403,7 +437,7 @@ init_vga_card:
#if defined(USE_BX_INFO) || defined(DEBUG)
msg_vga_init:
-.ascii "VGABios $Id: vgabios.c,v 1.61 2005/05/24 16:50:50 vruppert Exp $"
+.ascii "VGABios $Id: vgabios.c,v 1.67 2008/01/27 09:44:12 vruppert Exp $"
.byte 0x0d,0x0a,0x00
#endif
ASM_END
@@ -422,6 +456,8 @@ init_bios_area:
mov bx, # BIOSMEM_INITIAL_MODE
mov ax, [bx]
and ax, #0xffcf
+;; set 80x25 color (not clear from RBIL but usual)
+ or ax, #0x0020
mov [bx], ax
;; Just for the first int10 find its children
@@ -453,6 +489,29 @@ init_bios_area:
pop ds
ret
+
+_video_save_pointer_table:
+ .word _video_param_table
+ .word 0xc000
+
+ .word 0 /* XXX: fill it */
+ .word 0
+
+ .word 0 /* XXX: fill it */
+ .word 0
+
+ .word 0 /* XXX: fill it */
+ .word 0
+
+ .word 0 /* XXX: fill it */
+ .word 0
+
+ .word 0 /* XXX: fill it */
+ .word 0
+
+ .word 0 /* XXX: fill it */
+ .word 0
+
ASM_END
// --------------------------------------------------------------------------------------------
@@ -718,12 +777,7 @@ static void int10_func(DI, SI, BP, SP, BX, DX, CX, AX, DS, ES, FLAGS)
vbe_biosfn_set_mode(&AX,BX,ES,DI);
break;
case 0x04:
- //FIXME
-#ifdef DEBUG
- unimplemented();
-#endif
- // function failed
- AX=0x100;
+ vbe_biosfn_save_restore_state(&AX, CX, DX, ES, &BX);
break;
case 0x09:
//FIXME
@@ -774,8 +828,8 @@ static void biosfn_set_video_mode(mode) Bit8u mode;
// Should we clear the screen ?
Bit8u noclearmem=mode&0x80;
- Bit8u line,mmask,*palette;
- Bit16u i,twidth,theight,cheight;
+ Bit8u line,mmask,*palette,vpti;
+ Bit16u i,twidth,theightm1,cheight;
Bit8u modeset_ctl,video_ctl,vga_switches;
Bit16u crtc_addr;
@@ -798,9 +852,10 @@ static void biosfn_set_video_mode(mode) Bit8u mode;
if(line==0xFF)
return;
- twidth=vga_modes[line].twidth;
- theight=vga_modes[line].theight;
- cheight=vga_modes[line].cheight;
+ vpti=line_to_vpti[line];
+ twidth=video_param_table[vpti].twidth;
+ theightm1=video_param_table[vpti].theightm1;
+ cheight=video_param_table[vpti].cheight;
// Read the bios vga control
video_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL);
@@ -837,11 +892,9 @@ static void biosfn_set_video_mode(mode) Bit8u mode;
palette=&palette3;
break;
}
-
// Always 256*3 values
for(i=0;i<0x0100;i++)
- {
- if(i<=dac_regs[vga_modes[line].dacmodel])
+ {if(i<=dac_regs[vga_modes[line].dacmodel])
{outb(VGAREG_DAC_DATA,palette[(i*3)+0]);
outb(VGAREG_DAC_DATA,palette[(i*3)+1]);
outb(VGAREG_DAC_DATA,palette[(i*3)+2]);
@@ -862,21 +915,25 @@ static void biosfn_set_video_mode(mode) Bit8u mode;
inb(VGAREG_ACTL_RESET);
// Set Attribute Ctl
- for(i=0;i<=ACTL_MAX_REG;i++)
+ for(i=0;i<=0x13;i++)
{outb(VGAREG_ACTL_ADDRESS,i);
- outb(VGAREG_ACTL_WRITE_DATA,actl_regs[vga_modes[line].actlmodel][i]);
+ outb(VGAREG_ACTL_WRITE_DATA,video_param_table[vpti].actl_regs[i]);
}
+ outb(VGAREG_ACTL_ADDRESS,0x14);
+ outb(VGAREG_ACTL_WRITE_DATA,0x00);
// Set Sequencer Ctl
- for(i=0;i<=SEQU_MAX_REG;i++)
+ outb(VGAREG_SEQU_ADDRESS,0);
+ outb(VGAREG_SEQU_DATA,0x03);
+ for(i=1;i<=4;i++)
{outb(VGAREG_SEQU_ADDRESS,i);
- outb(VGAREG_SEQU_DATA,sequ_regs[vga_modes[line].sequmodel][i]);
+ outb(VGAREG_SEQU_DATA,video_param_table[vpti].sequ_regs[i - 1]);
}
// Set Grafx Ctl
- for(i=0;i<=GRDC_MAX_REG;i++)
+ for(i=0;i<=8;i++)
{outb(VGAREG_GRDC_ADDRESS,i);
- outb(VGAREG_GRDC_DATA,grdc_regs[vga_modes[line].grdcmodel][i]);
+ outb(VGAREG_GRDC_DATA,video_param_table[vpti].grdc_regs[i]);
}
// Set CRTC address VGA or MDA
@@ -885,13 +942,13 @@ static void biosfn_set_video_mode(mode) Bit8u mode;
// Disable CRTC write protection
outw(crtc_addr,0x0011);
// Set CRTC regs
- for(i=0;i<=CRTC_MAX_REG;i++)
+ for(i=0;i<=0x18;i++)
{outb(crtc_addr,i);
- outb(crtc_addr+1,crtc_regs[vga_modes[line].crtcmodel][i]);
+ outb(crtc_addr+1,video_param_table[vpti].crtc_regs[i]);
}
// Set the misc register
- outb(VGAREG_WRITE_MISC_OUTPUT,vga_modes[line].miscreg);
+ outb(VGAREG_WRITE_MISC_OUTPUT,video_param_table[vpti].miscreg);
// Enable video
outb(VGAREG_ACTL_ADDRESS,0x20);
@@ -923,9 +980,9 @@ static void biosfn_set_video_mode(mode) Bit8u mode;
// Set the BIOS mem
write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE,mode);
write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS,twidth);
- write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE,vga_modes[line].slength);
+ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE,*(Bit16u *)&video_param_table[vpti].slength_l);
write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS,crtc_addr);
- write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS,theight-1);
+ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS,theightm1);
write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT,cheight);
write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL,(0x60|noclearmem));
write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES,0xF9);
@@ -933,8 +990,8 @@ static void biosfn_set_video_mode(mode) Bit8u mode;
// FIXME We nearly have the good tables. to be reworked
write_byte(BIOSMEM_SEG,BIOSMEM_DCC_INDEX,0x08); // 8 is VGA should be ok for now
- write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER,0x00);
- write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER+2,0x00);
+ write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER, video_save_pointer_table);
+ write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER+2, 0xc000);
// FIXME
write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MSR,0x00); // Unavailable on vanilla vga, but...
@@ -1110,7 +1167,7 @@ Bit8u page;
}
else
{
- address = page*vga_modes[line].slength;
+ address = page * (*(Bit16u *)&video_param_table[line_to_vpti[line]].slength_l);
}
// CRTC regs 0x0c and 0x0d
@@ -1260,6 +1317,7 @@ Bit8u nblines;Bit8u attr;Bit8u rul;Bit8u cul;Bit8u rlr;Bit8u clr;Bit8u page;Bit8
memsetw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,(Bit16u)attr*0x100+' ',cols);
else
memcpyw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,vga_modes[line].sstart,((i-nblines)*nbcols+cul)*2,cols);
+ if (i>rlr) break;
}
}
}
@@ -1267,7 +1325,7 @@ Bit8u nblines;Bit8u attr;Bit8u rul;Bit8u cul;Bit8u rlr;Bit8u clr;Bit8u page;Bit8
else
{
// FIXME gfx mode not complete
- cheight=vga_modes[line].cheight;
+ cheight=video_param_table[line_to_vpti[line]].cheight;
switch(vga_modes[line].memmodel)
{
case PLANAR4:
@@ -1296,6 +1354,7 @@ Bit8u nblines;Bit8u attr;Bit8u rul;Bit8u cul;Bit8u rlr;Bit8u clr;Bit8u page;Bit8
vgamem_fill_pl4(cul,i,cols,nbcols,cheight,attr);
else
vgamem_copy_pl4(cul,i,i-nblines,cols,nbcols,cheight);
+ if (i>rlr) break;
}
}
}
@@ -1331,6 +1390,7 @@ Bit8u nblines;Bit8u attr;Bit8u rul;Bit8u cul;Bit8u rlr;Bit8u clr;Bit8u page;Bit8
vgamem_fill_cga(cul,i,cols,nbcols,cheight,attr);
else
vgamem_copy_cga(cul,i,i-nblines,cols,nbcols,cheight);
+ if (i>rlr) break;
}
}
}
@@ -1572,18 +1632,12 @@ Bit8u car;Bit8u page;Bit8u attr;Bit16u count;
address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+ycurs*nbcols)*2;
dummy=((Bit16u)attr<<8)+car;
-/*
-printf("sstart=%x\n", vga_modes[line].sstart);
-printf("address=%x\n", address);
-printf("dummy=%x\n", dummy);
-printf("count=%x\n", count);
-*/
memsetw(vga_modes[line].sstart,address,dummy,count);
}
else
{
// FIXME gfx mode not complete
- cheight=vga_modes[line].cheight;
+ cheight=video_param_table[line_to_vpti[line]].cheight;
bpp=vga_modes[line].pixbits;
while((count-->0) && (xcurs<nbcols))
{
@@ -1643,7 +1697,7 @@ Bit8u car;Bit8u page;Bit8u attr;Bit16u count;
else
{
// FIXME gfx mode not complete
- cheight=vga_modes[line].cheight;
+ cheight=video_param_table[line_to_vpti[line]].cheight;
bpp=vga_modes[line].pixbits;
while((count-->0) && (xcurs<nbcols))
{
@@ -1923,7 +1977,6 @@ Bit8u car;Bit8u page;Bit8u attr;Bit8u flag;
break;
case '\n':
- xcurs=0;
ycurs++;
break;
@@ -1952,7 +2005,7 @@ Bit8u car;Bit8u page;Bit8u attr;Bit8u flag;
else
{
// FIXME gfx mode not complete
- cheight=vga_modes[line].cheight;
+ cheight=video_param_table[line_to_vpti[line]].cheight;
bpp=vga_modes[line].pixbits;
switch(vga_modes[line].memmodel)
{
@@ -3112,23 +3165,215 @@ Bit16u BX;Bit16u ES;Bit16u DI;
}
// --------------------------------------------------------------------------------------------
-static void biosfn_read_video_state_size (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
+// --------------------------------------------------------------------------------------------
+static Bit16u biosfn_read_video_state_size2 (CX)
+ Bit16u CX;
{
-#ifdef DEBUG
- unimplemented();
-#endif
+ Bit16u size;
+ size = 0;
+ if (CX & 1) {
+ size += 0x46;
+ }
+ if (CX & 2) {
+ size += (5 + 8 + 5) * 2 + 6;
+ }
+ if (CX & 4) {
+ size += 3 + 256 * 3 + 1;
+}
+ return size;
}
-static void biosfn_save_video_state (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
+
+static void biosfn_read_video_state_size (CX, BX)
+ Bit16u CX; Bit16u *BX;
{
-#ifdef DEBUG
- unimplemented();
-#endif
+ Bit16u ss=get_SS();
+ write_word(ss, BX, biosfn_read_video_state_size2(CX));
}
-static void biosfn_restore_video_state (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
+
+static Bit16u biosfn_save_video_state (CX,ES,BX)
+ Bit16u CX;Bit16u ES;Bit16u BX;
{
-#ifdef DEBUG
- unimplemented();
-#endif
+ Bit16u i, v, crtc_addr, ar_index;
+
+ crtc_addr = read_word(BIOSMEM_SEG, BIOSMEM_CRTC_ADDRESS);
+ if (CX & 1) {
+ write_byte(ES, BX, inb(VGAREG_SEQU_ADDRESS)); BX++;
+ write_byte(ES, BX, inb(crtc_addr)); BX++;
+ write_byte(ES, BX, inb(VGAREG_GRDC_ADDRESS)); BX++;
+ inb(VGAREG_ACTL_RESET);
+ ar_index = inb(VGAREG_ACTL_ADDRESS);
+ write_byte(ES, BX, ar_index); BX++;
+ write_byte(ES, BX, inb(VGAREG_READ_FEATURE_CTL)); BX++;
+
+ for(i=1;i<=4;i++){
+ outb(VGAREG_SEQU_ADDRESS, i);
+ write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
+ }
+ outb(VGAREG_SEQU_ADDRESS, 0);
+ write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
+
+ for(i=0;i<=0x18;i++) {
+ outb(crtc_addr,i);
+ write_byte(ES, BX, inb(crtc_addr+1)); BX++;
+ }
+
+ for(i=0;i<=0x13;i++) {
+ inb(VGAREG_ACTL_RESET);
+ outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
+ write_byte(ES, BX, inb(VGAREG_ACTL_READ_DATA)); BX++;
+ }
+ inb(VGAREG_ACTL_RESET);
+
+ for(i=0;i<=8;i++) {
+ outb(VGAREG_GRDC_ADDRESS,i);
+ write_byte(ES, BX, inb(VGAREG_GRDC_DATA)); BX++;
+ }
+
+ write_word(ES, BX, crtc_addr); BX+= 2;
+
+ /* XXX: read plane latches */
+ write_byte(ES, BX, 0); BX++;
+ write_byte(ES, BX, 0); BX++;
+ write_byte(ES, BX, 0); BX++;
+ write_byte(ES, BX, 0); BX++;
+ }
+ if (CX & 2) {
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE)); BX++;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS)); BX += 2;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE)); BX += 2;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS)); BX += 2;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)); BX++;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT)); BX += 2;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL)); BX++;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES)); BX++;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL)); BX++;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE)); BX += 2;
+ for(i=0;i<8;i++) {
+ write_word(ES, BX, read_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i));
+ BX += 2;
+ }
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START)); BX += 2;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE)); BX++;
+ /* current font */
+ write_word(ES, BX, read_word(0, 0x1f * 4)); BX += 2;
+ write_word(ES, BX, read_word(0, 0x1f * 4 + 2)); BX += 2;
+ write_word(ES, BX, read_word(0, 0x43 * 4)); BX += 2;
+ write_word(ES, BX, read_word(0, 0x43 * 4 + 2)); BX += 2;
+ }
+ if (CX & 4) {
+ /* XXX: check this */
+ write_byte(ES, BX, inb(VGAREG_DAC_STATE)); BX++; /* read/write mode dac */
+ write_byte(ES, BX, inb(VGAREG_DAC_WRITE_ADDRESS)); BX++; /* pix address */
+ write_byte(ES, BX, inb(VGAREG_PEL_MASK)); BX++;
+ // Set the whole dac always, from 0
+ outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
+ for(i=0;i<256*3;i++) {
+ write_byte(ES, BX, inb(VGAREG_DAC_DATA)); BX++;
+ }
+ write_byte(ES, BX, 0); BX++; /* color select register */
+ }
+ return BX;
+}
+
+static Bit16u biosfn_restore_video_state (CX,ES,BX)
+ Bit16u CX;Bit16u ES;Bit16u BX;
+{
+ Bit16u i, crtc_addr, v, addr1, ar_index;
+
+ if (CX & 1) {
+ // Reset Attribute Ctl flip-flop
+ inb(VGAREG_ACTL_RESET);
+
+ crtc_addr = read_word(ES, BX + 0x40);
+ addr1 = BX;
+ BX += 5;
+
+ for(i=1;i<=4;i++){
+ outb(VGAREG_SEQU_ADDRESS, i);
+ outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
+ }
+ outb(VGAREG_SEQU_ADDRESS, 0);
+ outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
+
+ // Disable CRTC write protection
+ outw(crtc_addr,0x0011);
+ // Set CRTC regs
+ for(i=0;i<=0x18;i++) {
+ if (i != 0x11) {
+ outb(crtc_addr,i);
+ outb(crtc_addr+1, read_byte(ES, BX));
+ }
+ BX++;
+ }
+ // select crtc base address
+ v = inb(VGAREG_READ_MISC_OUTPUT) & ~0x01;
+ if (crtc_addr = 0x3d4)
+ v |= 0x01;
+ outb(VGAREG_WRITE_MISC_OUTPUT, v);
+
+ // enable write protection if needed
+ outb(crtc_addr, 0x11);
+ outb(crtc_addr+1, read_byte(ES, BX - 0x18 + 0x11));
+
+ // Set Attribute Ctl
+ ar_index = read_byte(ES, addr1 + 0x03);
+ inb(VGAREG_ACTL_RESET);
+ for(i=0;i<=0x13;i++) {
+ outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
+ outb(VGAREG_ACTL_WRITE_DATA, read_byte(ES, BX)); BX++;
+ }
+ outb(VGAREG_ACTL_ADDRESS, ar_index);
+ inb(VGAREG_ACTL_RESET);
+
+ for(i=0;i<=8;i++) {
+ outb(VGAREG_GRDC_ADDRESS,i);
+ outb(VGAREG_GRDC_DATA, read_byte(ES, BX)); BX++;
+ }
+ BX += 2; /* crtc_addr */
+ BX += 4; /* plane latches */
+
+ outb(VGAREG_SEQU_ADDRESS, read_byte(ES, addr1)); addr1++;
+ outb(crtc_addr, read_byte(ES, addr1)); addr1++;
+ outb(VGAREG_GRDC_ADDRESS, read_byte(ES, addr1)); addr1++;
+ addr1++;
+ outb(crtc_addr - 0x4 + 0xa, read_byte(ES, addr1)); addr1++;
+ }
+ if (CX & 2) {
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE, read_byte(ES, BX)); BX++;
+ write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS, read_word(ES, BX)); BX += 2;
+ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE, read_word(ES, BX)); BX += 2;
+ write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS, read_word(ES, BX)); BX += 2;
+ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS, read_byte(ES, BX)); BX++;
+ write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT, read_word(ES, BX)); BX += 2;
+ write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL, read_byte(ES, BX)); BX++;
+ write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES, read_byte(ES, BX)); BX++;
+ write_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL, read_byte(ES, BX)); BX++;
+ write_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE, read_word(ES, BX)); BX += 2;
+ for(i=0;i<8;i++) {
+ write_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i, read_word(ES, BX));
+ BX += 2;
+ }
+ write_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START, read_word(ES, BX)); BX += 2;
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE, read_byte(ES, BX)); BX++;
+ /* current font */
+ write_word(0, 0x1f * 4, read_word(ES, BX)); BX += 2;
+ write_word(0, 0x1f * 4 + 2, read_word(ES, BX)); BX += 2;
+ write_word(0, 0x43 * 4, read_word(ES, BX)); BX += 2;
+ write_word(0, 0x43 * 4 + 2, read_word(ES, BX)); BX += 2;
+ }
+ if (CX & 4) {
+ BX++;
+ v = read_byte(ES, BX); BX++;
+ outb(VGAREG_PEL_MASK, read_byte(ES, BX)); BX++;
+ // Set the whole dac always, from 0
+ outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
+ for(i=0;i<256*3;i++) {
+ outb(VGAREG_DAC_DATA, read_byte(ES, BX)); BX++;
+ }
+ BX++;
+ outb(VGAREG_DAC_WRITE_ADDRESS, v);
+ }
+ return BX;
}
// ============================================================================================
@@ -3566,9 +3811,9 @@ void printf(s)
for (i=0; i<format_width; i++) {
nibble = (arg >> (4 * digit)) & 0x000f;
if (nibble <= 9)
- outb(0xE9, nibble + '0');
+ outb(0x0500, nibble + '0');
else
- outb(0xE9, (nibble - 10) + 'A');
+ outb(0x0500, (nibble - 10) + 'A');
digit--;
}
in_format = 0;
@@ -3578,7 +3823,7 @@ void printf(s)
// }
}
else {
- outb(0xE9, c);
+ outb(0x0500, c);
}
s ++;
}
diff --git a/tools/firmware/vgabios/vgatables.h b/tools/firmware/vgabios/vgatables.h
index 7f159637c0..88091001f3 100644
--- a/tools/firmware/vgabios/vgatables.h
+++ b/tools/firmware/vgabios/vgatables.h
@@ -78,7 +78,7 @@
* Tables of default values for each mode
*
*/
-#define MODE_MAX 0x14
+#define MODE_MAX 15
#define TEXT 0x00
#define GRAPH 0x01
@@ -97,126 +97,38 @@
typedef struct
{Bit8u svgamode;
- Bit16u vesamode;
Bit8u class; /* TEXT, GRAPH */
Bit8u memmodel; /* CTEXT,MTEXT,CGA,PL1,PL2,PL4,P8,P15,P16,P24,P32 */
- Bit8u nbpages;
Bit8u pixbits;
- Bit16u swidth, sheight;
- Bit16u twidth, theight;
- Bit16u cwidth, cheight;
Bit16u sstart;
- Bit16u slength;
- Bit8u miscreg;
Bit8u pelmask;
- Bit8u crtcmodel;
- Bit8u actlmodel;
- Bit8u grdcmodel;
- Bit8u sequmodel;
Bit8u dacmodel; /* 0 1 2 3 */
} VGAMODES;
static VGAMODES vga_modes[MODE_MAX+1]=
-{//mode vesa class model pg bits sw sh tw th cw ch sstart slength misc pelm crtc actl gdc sequ dac
- {0x00, 0xFFFF, TEXT, CTEXT, 8, 4, 360, 400, 40, 25, 9, 16, 0xB800, 0x0800, 0x67, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x02},
- {0x01, 0xFFFF, TEXT, CTEXT, 8, 4, 360, 400, 40, 25, 9, 16, 0xB800, 0x0800, 0x67, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x02},
- {0x02, 0xFFFF, TEXT, CTEXT, 4, 4, 720, 400, 80, 25, 9, 16, 0xB800, 0x1000, 0x67, 0xFF, 0x01, 0x00, 0x00, 0x01, 0x02},
- {0x03, 0xFFFF, TEXT, CTEXT, 4, 4, 720, 400, 80, 25, 9, 16, 0xB800, 0x1000, 0x67, 0xFF, 0x01, 0x00, 0x00, 0x01, 0x02},
- {0x04, 0xFFFF, GRAPH, CGA, 4, 2, 320, 200, 40, 25, 8, 8, 0xB800, 0x0800, 0x63, 0xFF, 0x02, 0x01, 0x01, 0x02, 0x01},
- {0x05, 0xFFFF, GRAPH, CGA, 1, 2, 320, 200, 40, 25, 8, 8, 0xB800, 0x0800, 0x63, 0xFF, 0x02, 0x01, 0x01, 0x02, 0x01},
- {0x06, 0xFFFF, GRAPH, CGA, 1, 1, 640, 200, 80, 25, 8, 8, 0xB800, 0x1000, 0x63, 0xFF, 0x03, 0x02, 0x02, 0x03, 0x01},
- {0x07, 0xFFFF, TEXT, MTEXT, 4, 4, 720, 400, 80, 25, 9, 16, 0xB000, 0x1000, 0x66, 0xFF, 0x04, 0x03, 0x03, 0x01, 0x00},
- {0x0D, 0xFFFF, GRAPH, PLANAR4, 8, 4, 320, 200, 40, 25, 8, 8, 0xA000, 0x2000, 0x63, 0xFF, 0x05, 0x04, 0x04, 0x04, 0x01},
- {0x0E, 0xFFFF, GRAPH, PLANAR4, 4, 4, 640, 200, 80, 25, 8, 8, 0xA000, 0x4000, 0x63, 0xFF, 0x06, 0x04, 0x04, 0x05, 0x01},
- {0x0F, 0xFFFF, GRAPH, PLANAR1, 2, 1, 640, 350, 80, 25, 8, 14, 0xA000, 0x8000, 0xa3, 0xFF, 0x07, 0x05, 0x04, 0x05, 0x00},
- {0x10, 0xFFFF, GRAPH, PLANAR4, 2, 4, 640, 350, 80, 25, 8, 14, 0xA000, 0x8000, 0xa3, 0xFF, 0x07, 0x06, 0x04, 0x05, 0x02},
- {0x11, 0xFFFF, GRAPH, PLANAR1, 1, 1, 640, 480, 80, 30, 8, 16, 0xA000, 0x0000, 0xe3, 0xFF, 0x08, 0x07, 0x04, 0x05, 0x02},
- {0x12, 0xFFFF, GRAPH, PLANAR4, 1, 4, 640, 480, 80, 30, 8, 16, 0xA000, 0x0000, 0xe3, 0xFF, 0x08, 0x06, 0x04, 0x05, 0x02},
- {0x13, 0xFFFF, GRAPH, LINEAR8, 1, 8, 320, 200, 40, 25, 8, 8, 0xA000, 0x0000, 0x63, 0xFF, 0x09, 0x08, 0x05, 0x06, 0x03},
- {0x6A, 0xFFFF, GRAPH, PLANAR4, 1, 4, 800, 600,100, 37, 8, 16, 0xA000, 0x0000, 0xe3, 0xFF, 0x0A, 0x06, 0x04, 0x05, 0x02}
+{//mode class model bits sstart pelm dac
+ {0x00, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
+ {0x01, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
+ {0x02, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
+ {0x03, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
+ {0x04, GRAPH, CGA, 2, 0xB800, 0xFF, 0x01},
+ {0x05, GRAPH, CGA, 2, 0xB800, 0xFF, 0x01},
+ {0x06, GRAPH, CGA, 1, 0xB800, 0xFF, 0x01},
+ {0x07, TEXT, MTEXT, 4, 0xB000, 0xFF, 0x00},
+ {0x0D, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
+ {0x0E, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
+ {0x0F, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x00},
+ {0x10, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
+ {0x11, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x02},
+ {0x12, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
+ {0x13, GRAPH, LINEAR8, 8, 0xA000, 0xFF, 0x03},
+ {0x6A, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02}
};
-/* CRTC */
-#define CRTC_MAX_REG 0x18
-#define CRTC_MAX_MODEL 0x0A
-static Bit8u crtc_access[CRTC_MAX_REG+1]=
-{ /* 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-};
-static Bit8u crtc_regs[CRTC_MAX_MODEL+1][CRTC_MAX_REG+1]=
-{/* Model 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 */
- /* 00 */ 0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,0xff,
- /* 01 */ 0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,0xff,
- /* 02 */ 0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,0xff,
- /* 03 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,0xff,
- /* 04 */ 0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,0xff,
- /* 05 */ 0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,0xff,
- /* 06 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,0xff,
- /* 07 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x85,0x5d,0x28,0x0f,0x63,0xba,0xe3,0xff,
- /* 08 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x8c,0xdf,0x28,0x00,0xe7,0x04,0xe3,0xff,
- /* 09 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,0xff,
- /* 0A */ 0x7f,0x63,0x63,0x83,0x6b,0x1b,0x72,0xf0,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x8d,0x57,0x32,0x00,0x57,0x73,0xe3,0xff
-};
-
-/* Attribute Controler 0x3c0 */
-#define ACTL_MAX_REG 0x14
-#define ACTL_MAX_MODEL 0x08
-
-static Bit8u actl_access[ACTL_MAX_REG+1]=
-{/* 00 01 02 03 04 05 06 07 08 09 0A 0B OC OD OE OF 10 11 12 13 14 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-};
-
-static Bit8u actl_regs[ACTL_MAX_MODEL+1][ACTL_MAX_REG+1]=
-{/* Model 00 01 02 03 04 05 06 07 08 09 0A 0B OC OD OE OF 10 11 12 13 14 */
- /* 00 */ 0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x0c,0x00,0x0f,0x08,0x00,
- /* 01 */ 0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x01,0x00,0x03,0x00,0x00,
- /* 02 */ 0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x01,0x00,0x01,0x00,0x00,
- /* 03 */ 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0e,0x00,0x0f,0x08,0x00,
- /* 04 */ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x01,0x00,0x0f,0x00,0x00,
- /* 05 */ 0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,0x01,0x00,0x01,0x00,0x00,
- /* 06 */ 0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x01,0x00,0x0f,0x00,0x00,
- /* 07 */ 0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x01,0x00,0x01,0x00,0x00,
- /* 08 */ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x41,0x00,0x0f,0x00,0x00
-};
-
-/* Sequencer 0x3c4 */
-#define SEQU_MAX_REG 0x04
-#define SEQU_MAX_MODEL 0x06
-
-static Bit8u sequ_access[SEQU_MAX_REG+1]=
-{ /* 00 01 02 03 04 */
- 0x00,0x00,0x00,0x00,0x00
-};
-
-static Bit8u sequ_regs[SEQU_MAX_MODEL+1][SEQU_MAX_REG+1]=
-{/* Model 00 01 02 03 04 */
- /* 00 */ 0x03,0x08,0x03,0x00,0x02,
- /* 01 */ 0x03,0x00,0x03,0x00,0x02,
- /* 02 */ 0x03,0x09,0x03,0x00,0x02,
- /* 03 */ 0x03,0x01,0x01,0x00,0x06,
- /* 04 */ 0x03,0x09,0x0f,0x00,0x06,
- /* 05 */ 0x03,0x01,0x0f,0x00,0x06,
- /* 06 */ 0x03,0x01,0x0f,0x00,0x0e
-};
-
-/* Graphic ctl 0x3ce */
-#define GRDC_MAX_REG 0x08
-#define GRDC_MAX_MODEL 0x05
-
-static Bit8u grdc_access[GRDC_MAX_REG+1]=
-{ /* 00 01 02 03 04 05 06 07 08 */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-};
-
-static Bit8u grdc_regs[GRDC_MAX_MODEL+1][GRDC_MAX_REG+1]=
-{/* Model 00 01 02 03 04 05 06 07 08 */
- /* 00 */ 0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x0f,0xff,
- /* 01 */ 0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x0f,0xff,
- /* 02 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0f,0xff,
- /* 03 */ 0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x0f,0xff,
- /* 04 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,0xff,
- /* 05 */ 0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,0xff
+/* convert index in vga_modes[] to index in video_param_table[] */
+static Bit8u line_to_vpti[MODE_MAX+1]={
+ 0x17, 0x17, 0x18, 0x18, 0x04, 0x05, 0x06, 0x07,
+ 0x0d, 0x0e, 0x11, 0x12, 0x1a, 0x1b, 0x1c, 0x1d,
};
/* Default Palette */
@@ -225,6 +137,398 @@ static Bit8u grdc_regs[GRDC_MAX_MODEL+1][GRDC_MAX_REG+1]=
static Bit8u dac_regs[DAC_MAX_MODEL+1]=
{0x3f,0x3f,0x3f,0xff};
+/* standard BIOS Video Parameter Table */
+typedef struct {
+ Bit8u twidth;
+ Bit8u theightm1;
+ Bit8u cheight;
+ Bit8u slength_l;
+ Bit8u slength_h;
+ Bit8u sequ_regs[4];
+ Bit8u miscreg;
+ Bit8u crtc_regs[25];
+ Bit8u actl_regs[20];
+ Bit8u grdc_regs[9];
+} VideoParamTableEntry;
+
+static VideoParamTableEntry video_param_table[30] = {
+{
+ /* index=0x00 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x01 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x02 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x03 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x04 vga mode 0x04 */
+ 40, 24, 8, 0x00, 0x08, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
+ 0xff, /* crtc_regs */
+ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x03, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x05 vga mode 0x05 */
+ 40, 24, 8, 0x00, 0x08, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
+ 0xff, /* crtc_regs */
+ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x03, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x06 vga mode 0x06 */
+ 80, 24, 8, 0x00, 0x10, /* tw, th-1, ch, slength */
+ 0x01, 0x01, 0x00, 0x06, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xc2,
+ 0xff, /* crtc_regs */
+ 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x01, 0x00, 0x01, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x07 vga mode 0x07 */
+ 80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */
+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x66, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x0e, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x08 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x09 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0a no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0b no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0c no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0d vga mode 0x0d */
+ 40, 24, 8, 0x00, 0x20, /* tw, th-1, ch, slength */
+ 0x09, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x0e vga mode 0x0e */
+ 80, 24, 8, 0x00, 0x40, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x0f no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x10 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x11 vga mode 0x0f */
+ 80, 24, 14, 0x00, 0x80, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x12 vga mode 0x10 */
+ 80, 24, 14, 0x00, 0x80, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x13 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x14 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x15 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x16 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x17 vga mode 0x01 */
+ 40, 24, 16, 0x00, 0x08, /* tw, th-1, ch, slength */
+ 0x08, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x67, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x0c, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x18 vga mode 0x03 */
+ 80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */
+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x67, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x0c, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x19 vga mode 0x07 */
+ 80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */
+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x66, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x0e, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1a vga mode 0x11 */
+ 80, 29, 16, 0x00, 0x00, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xe3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
+ 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1b vga mode 0x12 */
+ 80, 29, 16, 0x00, 0x00, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xe3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1c vga mode 0x13 */
+ 40, 24, 8, 0x00, 0x00, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x0e, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x40, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x41, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1d vga mode 0x6a */
+ 100, 36, 16, 0x00, 0x00, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xe3, /* miscreg */
+ 0x7f, 0x63, 0x63, 0x83, 0x6b, 0x1b, 0x72, 0xf0,
+ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x59, 0x8d, 0x57, 0x32, 0x00, 0x57, 0x73, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+};
+
/* Mono */
static Bit8u palette0[63+1][3]=
{