WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] vgabios: upgrade to CVS version

To: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] vgabios: upgrade to CVS version
From: Jean Guyader <jean.guyader@xxxxxxxxxxxxx>
Date: Fri, 04 Jul 2008 12:47:30 +0100
Cc: James Harper <james.harper@xxxxxxxxxxxxxxxx>
Delivery-date: Fri, 04 Jul 2008 04:48:52 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla-Thunderbird 2.0.0.14 (X11/20080509)
Upgrade the vgabios to the CVS version.

cvs -z3 -d:pserver:anonymous@xxxxxxxxxxxxxxxxxxxxxxx:/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)

Signed-off-by: Jean Guyader <jean.guyader@xxxxxxxxxxxxx>

This patch fixes the bug that James had about the IDR boot CD.

--
Jean Guyader
diff -r 6ace85eb96c0 tools/firmware/vgabios/ChangeLog
--- a/tools/firmware/vgabios/ChangeLog  Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/ChangeLog  Fri Jul 04 12:44:52 2008 +0100
@@ -1,3 +1,207 @@ 2005-05-24 16:50  vruppert
+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@xxxxxxxxxxxxx)
+
+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 -r 6ace85eb96c0 tools/firmware/vgabios/Makefile
--- a/tools/firmware/vgabios/Makefile   Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/Makefile   Fri Jul 04 12:44:52 2008 +0100
@@ -21,7 +21,7 @@ cirrus-bios: vgabios-cirrus.bin vgabios-
 
 .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.
        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 vg
        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 v
        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 vgabi
 
 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 -r 6ace85eb96c0 tools/firmware/vgabios/README
--- a/tools/firmware/vgabios/README     Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/README     Fri Jul 04 12:44:52 2008 +0100
@@ -90,6 +90,34 @@ For any information on qemu, visit the w
 
 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@xxxxxxxxxxxxx)
+    . 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 -r 6ace85eb96c0 tools/firmware/vgabios/TODO
--- a/tools/firmware/vgabios/TODO       Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/TODO       Fri Jul 04 12:44:52 2008 +0100
@@ -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 -r 6ace85eb96c0 tools/firmware/vgabios/biossums.c
--- a/tools/firmware/vgabios/biossums.c Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/biossums.c Fri Jul 04 12:44:52 2008 +0100
@@ -1,24 +1,34 @@
 /* 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_get_value(  byte* data,
 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;
 
+
+int main(int argc, char* argv[])
+{
   FILE* stream;
-  long  offset, tmp_offset;
-  byte  cur_val = 0, new_val = 0;
-  int   hits;
+  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 );
+  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;
+  }
 
   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;
+  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;
+    }
+  }
 
   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 );
+  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 (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);
   }
-  printf( "\n" );
 
-
-  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 );
-  }
-  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,
   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,
 
 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,
   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 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,
 
 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 -r 6ace85eb96c0 tools/firmware/vgabios/clext.c
--- a/tools/firmware/vgabios/clext.c    Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/clext.c    Fri Jul 04 12:44:52 2008 +0100
@@ -239,6 +239,21 @@ 0xffff
 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[] =
 {
@@ -291,6 +306,10 @@ cirrus_mode_t cirrus_modes[] =
  {0x75,1280,1024,16,0xe1,
    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},
@@ -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
@@ -1650,6 +1673,7 @@ cirrus_vesa_handlers:
   dw cirrus_vesa_unimplemented
   ;; 10h
   dw cirrus_vesa_10h
+
 
 
 ASM_END
diff -r 6ace85eb96c0 tools/firmware/vgabios/vbe.c
--- a/tools/firmware/vgabios/vbe.c      Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/vbe.c      Fri Jul 04 12:44:52 2008 +0100
@@ -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;
@@ -51,10 +47,6 @@ extern char vbebios_vendor_name;
 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?
@@ -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:
+  .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
 
-.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
+  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
@@ -208,6 +294,28 @@ dispi_get_bpp:
   jz   get_bpp_noinc
   inc  ah
 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
 
@@ -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 D
 #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 D
                 // 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 D
                 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 @@ ASM_END
 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 -r 6ace85eb96c0 tools/firmware/vgabios/vbe.h
--- a/tools/firmware/vgabios/vbe.h      Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/vbe.h      Fri Jul 04 12:44:52 2008 +0100
@@ -14,7 +14,7 @@ void vbe_biosfn_return_controller_inform
 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 -r 6ace85eb96c0 tools/firmware/vgabios/vbe_display_api.txt
--- a/tools/firmware/vgabios/vbe_display_api.txt        Fri Jun 20 18:37:29 
2008 +0100
+++ b/tools/firmware/vgabios/vbe_display_api.txt        Fri Jul 04 12:44:52 
2008 +0100
@@ -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 @@ 0xb0c0            supports the following
                   VBE_DISPI_INDEX_BPP
                   VBE_DISPI_INDEX_ENABLE
                   VBE_DISPI_INDEX_BANK
-                  
+
                   Bpp format supported is:
                   VBE_DISPI_BPP_8
 
@@ -40,13 +40,15 @@ 0xb0c3            supports 0xb0c2 VBE_DI
                   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.
@@ -201,6 +208,9 @@ API
     If the new flag VBE_DISPI_GETCAPS is enabled, the xres, yres and bpp 
registers
     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)
 --------------
@@ -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 -r 6ace85eb96c0 tools/firmware/vgabios/vbetables-gen.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/vgabios/vbetables-gen.c    Fri Jul 04 12:44:52 2008 +0100
@@ -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 -r 6ace85eb96c0 tools/firmware/vgabios/vbetables.h
--- a/tools/firmware/vgabios/vbetables.h        Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/vbetables.h        Fri Jul 04 12:44:52 2008 +0100
@@ -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 -r 6ace85eb96c0 tools/firmware/vgabios/vgabios.c
--- a/tools/firmware/vgabios/vgabios.c  Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/vgabios.c  Fri Jul 04 12:44:52 2008 +0100
@@ -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_write_string();
 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,15 +149,23 @@ 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
@@ -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,8 +377,13 @@ int10_test_vbe_07:
   jmp   int10_end
 int10_test_vbe_08:
   cmp   al, #0x08
+  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_set_get_dac_palette_format
+  call  vbe_biosfn_return_protected_mode_interface
   jmp   int10_end
 #endif
 
@@ -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, B
           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) 
 
  // 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) 
  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) 
       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) 
  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) 
  // 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) 
  // 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) 
 
  // 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
           
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
  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
               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
               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 c
    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 c
  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 fl
     break;
 
    case '\n':
-    xcurs=0;
     ycurs++;
     break;
 
@@ -1952,7 +2005,7 @@ Bit8u car;Bit8u page;Bit8u attr;Bit8u fl
     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;
 }
-static void biosfn_save_video_state (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
+    return size;
+}
+
+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 -r 6ace85eb96c0 tools/firmware/vgabios/vgatables.h
--- a/tools/firmware/vgabios/vgatables.h        Fri Jun 20 18:37:29 2008 +0100
+++ b/tools/firmware/vgabios/vgatables.h        Fri Jul 04 12:44:52 2008 +0100
@@ -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 */
@@ -224,6 +136,398 @@ static Bit8u grdc_regs[GRDC_MAX_MODEL+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]=
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] vgabios: upgrade to CVS version, Jean Guyader <=