All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fabrice Bellard <fabrice@bellard.org>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] qemu/pc-bios vgabios.diff vgabios.bin vgabios-c...
Date: Wed, 14 Jun 2006 00:59:03 -0000	[thread overview]
Message-ID: <E1FqJig-0005Co-Rk@savannah.gnu.org> (raw)

CVSROOT:	/sources/qemu
Module name:	qemu
Changes by:	Fabrice Bellard <bellard>	06/06/14 00:58:54

Modified files:
	pc-bios        : vgabios.diff vgabios.bin vgabios-cirrus.bin 

Log message:
	fixed VBE protected mode calls - added VGA and VBE save restore support (not fully tested) - automatic generation of VBE mode table

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemu/pc-bios/vgabios.diff?cvsroot=qemu&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/qemu/pc-bios/vgabios.bin?cvsroot=qemu&rev=1.8
http://cvs.savannah.gnu.org/viewcvs/qemu/pc-bios/vgabios-cirrus.bin?cvsroot=qemu&rev=1.8

Patches:
Index: vgabios.diff
===================================================================
RCS file: /sources/qemu/qemu/pc-bios/vgabios.diff,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- vgabios.diff	13 Jun 2006 16:54:27 -0000	1.4
+++ vgabios.diff	14 Jun 2006 00:58:54 -0000	1.5
@@ -1,10 +1,36 @@
+Index: Makefile
+===================================================================
+RCS file: /sources/vgabios/vgabios/Makefile,v
+retrieving revision 1.17
+diff -u -w -r1.17 Makefile
+--- Makefile	6 Mar 2005 13:06:47 -0000	1.17
++++ Makefile	14 Jun 2006 00:51:06 -0000
+@@ -22,7 +22,7 @@
+ cirrus-bios: vgabios-cirrus.bin vgabios-cirrus.debug.bin
+ 
+ clean:
+-	/bin/rm -f  biossums *.o *.s *.ld86 \
++	/bin/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
+ 
+ dist-clean: clean
+@@ -79,3 +79,9 @@
+ 
+ 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 > $@
 Index: clext.c
 ===================================================================
 RCS file: /sources/vgabios/vgabios/clext.c,v
 retrieving revision 1.10
 diff -u -w -r1.10 clext.c
 --- clext.c	25 Mar 2006 10:19:15 -0000	1.10
-+++ clext.c	13 Jun 2006 16:47:23 -0000
++++ clext.c	14 Jun 2006 00:51:06 -0000
 @@ -544,6 +544,13 @@
  cirrus_set_video_mode_extended:
    call cirrus_switch_mode
@@ -72,14 +98,289 @@
  cirrus_extbios_handlers:
    ;; 80h
    dw cirrus_extbios_80h
+Index: vbe.c
+===================================================================
+RCS file: /sources/vgabios/vgabios/vbe.c,v
+retrieving revision 1.48
+diff -u -w -r1.48 vbe.c
+--- vbe.c	26 Dec 2005 19:50:26 -0000	1.48
++++ vbe.c	14 Jun 2006 00:51:07 -0000
+@@ -118,21 +118,114 @@
+ .word VBE_VESA_MODE_END_OF_LIST
+ #endif
+ 
++  .align 2
+ vesa_pm_start:
+   dw vesa_pm_set_window - vesa_pm_start
+-  dw vesa_pm_set_display_strt - vesa_pm_start
++  dw vesa_pm_set_display_start - vesa_pm_start
+   dw vesa_pm_unimplemented - vesa_pm_start
+-  dw 0
++  dw vesa_pm_io_ports_table - vesa_pm_start
++vesa_pm_io_ports_table:
++  dw VBE_DISPI_IOPORT_INDEX
++  dw VBE_DISPI_IOPORT_INDEX + 1
++  dw VBE_DISPI_IOPORT_DATA
++  dw VBE_DISPI_IOPORT_DATA + 1
++  dw 0xffff
++  dw 0xffff
+ 
+   USE32
+ vesa_pm_set_window:
+-  mov ax, #0x4f05
+-  int #0x10
++  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
++  pop  dx
++  mov  ax, #0x004f
+   ret
+ 
+ vesa_pm_set_display_start:
+-  mov ax, #0x4f07
+-  int #0x10
++  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
++
++  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
++
++  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:
+@@ -835,6 +928,64 @@
+ 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:
+@@ -849,10 +1000,48 @@
+  *              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
+  * 
+@@ -1090,7 +1279,7 @@
+  */
+ ASM_START
+ vbe_biosfn_return_protected_mode_interface:
+-  test bx, bx
++  test bl, bl
+   jnz _fail
+   mov di, #0xc000
+   mov es, di
 Index: vbe.h
 ===================================================================
 RCS file: /sources/vgabios/vgabios/vbe.h,v
 retrieving revision 1.24
 diff -u -w -r1.24 vbe.h
 --- vbe.h	9 May 2004 20:31:31 -0000	1.24
-+++ vbe.h	13 Jun 2006 16:47:24 -0000
-@@ -193,6 +193,10 @@
++++ vbe.h	14 Jun 2006 00:51:07 -0000
+@@ -14,7 +14,7 @@
+ 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 @@
+    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 @@
  #define VBE_VESA_MODE_1280X1024X1555                     0x119
  #define VBE_VESA_MODE_1280X1024X565                      0x11A
  #define VBE_VESA_MODE_1280X1024X888                      0x11B
@@ -90,7 +391,7 @@
  
  // BOCHS/PLEX86 'own' mode numbers
  #define VBE_OWN_MODE_320X200X8888                        0x140
-@@ -202,6 +206,12 @@
+@@ -202,6 +212,12 @@
  #define VBE_OWN_MODE_1024X768X8888                       0x144
  #define VBE_OWN_MODE_1280X1024X8888                      0x145
  #define VBE_OWN_MODE_320X200X8                           0x146
@@ -103,7 +404,7 @@
  
  #define VBE_VESA_MODE_END_OF_LIST                        0xFFFF
  
-@@ -259,7 +269,7 @@
+@@ -259,7 +275,7 @@
  //        like 0xE0000000
  
  
@@ -112,2367 +413,484 @@
  
    #define VBE_DISPI_BANK_ADDRESS          0xA0000
    #define VBE_DISPI_BANK_SIZE_KB          64
-Index: vbetables.h
+Index: vgabios.c
 ===================================================================
-RCS file: /sources/vgabios/vgabios/vbetables.h,v
-retrieving revision 1.24
-diff -u -w -r1.24 vbetables.h
---- vbetables.h	22 Jul 2004 18:37:29 -0000	1.24
-+++ vbetables.h	13 Jun 2006 16:47:24 -0000
-@@ -14,46 +14,29 @@
-         ModeInfoBlockCompact    info;
- } ModeInfoListItem;
- 
--// FIXME: check all member variables to be correct for the different modi
--// FIXME: add more modi
- static ModeInfoListItem mode_info_list[]=
+RCS file: /sources/vgabios/vgabios/vgabios.c,v
+retrieving revision 1.64
+diff -u -w -r1.64 vgabios.c
+--- vgabios.c	25 Mar 2006 10:19:16 -0000	1.64
++++ vgabios.c	14 Jun 2006 00:51:07 -0000
+@@ -109,8 +109,8 @@
+ 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
+@@ -748,12 +748,7 @@
+           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
+@@ -3138,23 +3133,215 @@
+ }
+ 
+ // --------------------------------------------------------------------------------------------
+-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;
  {
--        {
--                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,
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*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  NumberOfBanks*/ 4,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_PACKED_PIXEL,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        15,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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,
-@@ -63,15 +46,9 @@
-    /*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,
-@@ -84,45 +61,28 @@
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*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  NumberOfBanks*/ 5,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_PACKED_PIXEL,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        11,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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,
-@@ -132,15 +92,9 @@
-    /*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,
-@@ -153,44 +107,28 @@
-    /*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,
-+} },
-+{ 0x0102, /* 800x600x4 */
-+{ /*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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*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  NumberOfBanks*/ 1,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_PLANAR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        15,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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,
-@@ -200,11 +138,9 @@
-    /*Bit8u  RsvdMaskSize*/              0,
-    /*Bit8u  RsvdFieldPosition*/         0,
-    /*Bit8u  DirectColorModeInfo*/       0,
--// Mandatory information for VBE 2.0 and above
--   /*Bit32u PhysBasePtr*/               0,
-+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
-    /*Bit32u OffScreenMemOffset*/        0,
-    /*Bit16u OffScreenMemSize*/          0,
--// Mandatory information for VBE 3.0 and above
-    /*Bit16u LinBytesPerScanLine*/       100,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-@@ -217,46 +153,28 @@
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*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  NumberOfBanks*/ 8,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_PACKED_PIXEL,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        7,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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,
-@@ -266,15 +184,9 @@
-    /*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,
-@@ -287,46 +199,28 @@
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*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  NumberOfBanks*/ 12,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_PACKED_PIXEL,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        3,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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,
-@@ -336,15 +230,9 @@
-    /*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,
-@@ -357,116 +245,74 @@
-    /*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 |
+-#ifdef DEBUG
+- unimplemented();
 -#endif
--                                        VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
--   /*Bit8u  WinAAttributes*/            VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
--                                        VBE_WINDOW_ATTRIBUTE_READABLE |
--                                        VBE_WINDOW_ATTRIBUTE_WRITEABLE,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          640*2,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               640,
--   /*Bit16u YResolution*/               480,
-+/*Bit16u BytesPerScanLine*/ 1280,
-+/*Bit16u XResolution*/ 1280,
-+/*Bit16u YResolution*/ 1024,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
--   /*Bit8u  BitsPerPixel*/              15,
--   /*Bit8u  NumberOfBanks*/             1,
--   /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-+/*Bit8u  BitsPerPixel*/ 8,
-+/*Bit8u  NumberOfBanks*/ 20,
-+/*Bit8u  MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        5,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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  RedMaskSize*/ 0,
-+/*Bit8u  RedFieldPosition*/ 0,
-+/*Bit8u  GreenMaskSize*/ 0,
-+/*Bit8u  GreenFieldPosition*/ 0,
-+/*Bit8u  BlueMaskSize*/ 0,
-    /*Bit8u  BlueFieldPosition*/         0,
--   /*Bit8u  RsvdMaskSize*/              1,
--   /*Bit8u  RsvdFieldPosition*/         15,
-+/*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,
-+/*Bit16u LinBytesPerScanLine*/ 1280,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
--   /*Bit8u  LinRedMaskSize*/            5,
--   /*Bit8u  LinRedFieldPosition*/       10,
-+/*Bit8u  LinRedMaskSize*/ 0,
-+/*Bit8u  LinRedFieldPosition*/ 0,
-    /*Bit8u  LinGreenMaskSize*/          0,
--   /*Bit8u  LinGreenFieldPosition*/     5,
--   /*Bit8u  LinBlueMaskSize*/           5,
-+/*Bit8u  LinGreenFieldPosition*/ 0,
-+/*Bit8u  LinBlueMaskSize*/ 0,
-    /*Bit8u  LinBlueFieldPosition*/      0,
--   /*Bit8u  LinRsvdMaskSize*/           1,
--   /*Bit8u  LinRsvdFieldPosition*/      15,
-+/*Bit8u  LinRsvdMaskSize*/ 0,
-+/*Bit8u  LinRsvdFieldPosition*/ 0,
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          800*2,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               800,
--   /*Bit16u YResolution*/               600,
-+/*Bit16u BytesPerScanLine*/ 640,
-+/*Bit16u XResolution*/ 320,
-+/*Bit16u YResolution*/ 200,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
-    /*Bit8u  BitsPerPixel*/              15,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  NumberOfBanks*/ 2,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        3,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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,
-@@ -476,16 +322,10 @@
-    /*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,
-+/*Bit16u LinBytesPerScanLine*/ 640,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-    /*Bit8u  LinRedMaskSize*/            5,
-@@ -497,256 +337,166 @@
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          1024*2,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               1024,
--   /*Bit16u YResolution*/               768,
-+/*Bit16u BytesPerScanLine*/ 640,
-+/*Bit16u XResolution*/ 320,
-+/*Bit16u YResolution*/ 200,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
--   /*Bit8u  BitsPerPixel*/              15,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  BitsPerPixel*/ 16,
-+/*Bit8u  NumberOfBanks*/ 2,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        1,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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  RedFieldPosition*/ 11,
-+/*Bit8u  GreenMaskSize*/ 6,
-    /*Bit8u  GreenFieldPosition*/        5,
-    /*Bit8u  BlueMaskSize*/              5,
-    /*Bit8u  BlueFieldPosition*/         0,
--   /*Bit8u  RsvdMaskSize*/              1,
--   /*Bit8u  RsvdFieldPosition*/         15,
-+/*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,
-+/*Bit16u LinBytesPerScanLine*/ 640,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-    /*Bit8u  LinRedMaskSize*/            5,
--   /*Bit8u  LinRedFieldPosition*/       10,
--   /*Bit8u  LinGreenMaskSize*/          5,
-+/*Bit8u  LinRedFieldPosition*/ 11,
-+/*Bit8u  LinGreenMaskSize*/ 6,
-    /*Bit8u  LinGreenFieldPosition*/     5,
-    /*Bit8u  LinBlueMaskSize*/           5,
-    /*Bit8u  LinBlueFieldPosition*/      0,
--   /*Bit8u  LinRsvdMaskSize*/           1,
--   /*Bit8u  LinRsvdFieldPosition*/      15,
-+/*Bit8u  LinRsvdMaskSize*/ 0,
-+/*Bit8u  LinRsvdFieldPosition*/ 0,
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          640*2,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               640,
--   /*Bit16u YResolution*/               480,
-+/*Bit16u BytesPerScanLine*/ 960,
-+/*Bit16u XResolution*/ 320,
-+/*Bit16u YResolution*/ 200,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
--   /*Bit8u  BitsPerPixel*/              16,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  BitsPerPixel*/ 24,
-+/*Bit8u  NumberOfBanks*/ 3,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        5,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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  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*2,
-+/*Bit16u LinBytesPerScanLine*/ 960,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
--   /*Bit8u  LinRedMaskSize*/            5,
--   /*Bit8u  LinRedFieldPosition*/       11,
--   /*Bit8u  LinGreenMaskSize*/          6,
--   /*Bit8u  LinGreenFieldPosition*/     5,
--   /*Bit8u  LinBlueMaskSize*/           5,
-+/*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_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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          800*2,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               800,
--   /*Bit16u YResolution*/               600,
-+/*Bit16u BytesPerScanLine*/ 1280,
-+/*Bit16u XResolution*/ 640,
-+/*Bit16u YResolution*/ 480,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
--   /*Bit8u  BitsPerPixel*/              16,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  BitsPerPixel*/ 15,
-+/*Bit8u  NumberOfBanks*/ 10,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        3,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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  RedFieldPosition*/ 10,
-+/*Bit8u  GreenMaskSize*/ 5,
-    /*Bit8u  GreenFieldPosition*/        5,
-    /*Bit8u  BlueMaskSize*/              5,
-    /*Bit8u  BlueFieldPosition*/         0,
--   /*Bit8u  RsvdMaskSize*/              0,
--   /*Bit8u  RsvdFieldPosition*/         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,
-+/*Bit16u LinBytesPerScanLine*/ 1280,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-    /*Bit8u  LinRedMaskSize*/            5,
--   /*Bit8u  LinRedFieldPosition*/       11,
--   /*Bit8u  LinGreenMaskSize*/          6,
-+/*Bit8u  LinRedFieldPosition*/ 10,
-+/*Bit8u  LinGreenMaskSize*/ 5,
-    /*Bit8u  LinGreenFieldPosition*/     5,
-    /*Bit8u  LinBlueMaskSize*/           5,
-    /*Bit8u  LinBlueFieldPosition*/      0,
--   /*Bit8u  LinRsvdMaskSize*/           0,
--   /*Bit8u  LinRsvdFieldPosition*/      0,
-+/*Bit8u  LinRsvdMaskSize*/ 1,
-+/*Bit8u  LinRsvdFieldPosition*/ 15,
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          1024*2,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               1024,
--   /*Bit16u YResolution*/               768,
-+/*Bit16u BytesPerScanLine*/ 1280,
-+/*Bit16u XResolution*/ 640,
-+/*Bit16u YResolution*/ 480,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
-    /*Bit8u  BitsPerPixel*/              16,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  NumberOfBanks*/ 10,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        1,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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,
-@@ -756,16 +506,10 @@
-    /*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,
-+/*Bit16u LinBytesPerScanLine*/ 1280,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-    /*Bit8u  LinRedMaskSize*/            5,
-@@ -777,46 +521,28 @@
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          640*3,
--// Mandatory information for VBE 1.2 and above
-+/*Bit16u BytesPerScanLine*/ 1920,
-    /*Bit16u XResolution*/               640,
-    /*Bit16u YResolution*/               480,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
-    /*Bit8u  BitsPerPixel*/              24,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  NumberOfBanks*/ 15,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        3,
-+/*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,
-@@ -826,16 +552,10 @@
-    /*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,
-+/*Bit16u LinBytesPerScanLine*/ 1920,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-    /*Bit8u  LinRedMaskSize*/            8,
-@@ -847,186 +567,764 @@
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          800*3,
--// Mandatory information for VBE 1.2 and above
-+/*Bit16u BytesPerScanLine*/ 1600,
-    /*Bit16u XResolution*/               800,
-    /*Bit16u YResolution*/               600,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
--   /*Bit8u  BitsPerPixel*/              24,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  BitsPerPixel*/ 15,
-+/*Bit8u  NumberOfBanks*/ 15,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        1,
-+/*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  RedMaskSize*/ 5,
-+/*Bit8u  RedFieldPosition*/ 10,
-+/*Bit8u  GreenMaskSize*/ 5,
-+/*Bit8u  GreenFieldPosition*/ 5,
-+/*Bit8u  BlueMaskSize*/ 5,
-    /*Bit8u  BlueFieldPosition*/         0,
--   /*Bit8u  RsvdMaskSize*/              0,
--   /*Bit8u  RsvdFieldPosition*/         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*3,
-+/*Bit16u LinBytesPerScanLine*/ 1600,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
--   /*Bit8u  LinRedMaskSize*/            8,
--   /*Bit8u  LinRedFieldPosition*/       16,
--   /*Bit8u  LinGreenMaskSize*/          8,
--   /*Bit8u  LinGreenFieldPosition*/     8,
--   /*Bit8u  LinBlueMaskSize*/           8,
-+/*Bit8u  LinRedMaskSize*/ 5,
-+/*Bit8u  LinRedFieldPosition*/ 10,
-+/*Bit8u  LinGreenMaskSize*/ 5,
-+/*Bit8u  LinGreenFieldPosition*/ 5,
-+/*Bit8u  LinBlueMaskSize*/ 5,
-    /*Bit8u  LinBlueFieldPosition*/      0,
--   /*Bit8u  LinRsvdMaskSize*/           0,
--   /*Bit8u  LinRsvdFieldPosition*/      0,
-+/*Bit8u  LinRsvdMaskSize*/ 1,
-+/*Bit8u  LinRsvdFieldPosition*/ 15,
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          1024*3,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               1024,
--   /*Bit16u YResolution*/               768,
-+/*Bit16u BytesPerScanLine*/ 1600,
-+/*Bit16u XResolution*/ 800,
-+/*Bit16u YResolution*/ 600,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
--   /*Bit8u  BitsPerPixel*/              24,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  BitsPerPixel*/ 16,
-+/*Bit8u  NumberOfBanks*/ 15,
-    /*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  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*3,
-+/*Bit16u LinBytesPerScanLine*/ 1600,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
--   /*Bit8u  LinRedMaskSize*/            8,
--   /*Bit8u  LinRedFieldPosition*/       16,
--   /*Bit8u  LinGreenMaskSize*/          8,
--   /*Bit8u  LinGreenFieldPosition*/     8,
-+/*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*/ 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*/ 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*/ 0,
-+/*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*/ 0,
-+/*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*/ 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*/ 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*/ 0,
-+/*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*/ 0,
-+/*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*/ 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*/ 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*/ 0,
-+/*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*/ 0,
-+/*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*/ 0,
-+/*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,
--/*} 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,
-+} },
-+{ 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*/ 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*/ 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*/ 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*/ 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*/ 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*/ 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*/ 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*/ 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*/ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          640*4,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               640,
--   /*Bit16u YResolution*/               480,
-+/*Bit16u BytesPerScanLine*/ 3200,
-+/*Bit16u XResolution*/ 800,
-+/*Bit16u YResolution*/ 600,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
-    /*Bit8u  BitsPerPixel*/              32,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  NumberOfBanks*/ 30,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        1,
-+/*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,
-@@ -1035,17 +1333,11 @@
-    /*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
-+/*Bit8u  DirectColorModeInfo*/ 0,
-    /*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,
-+/*Bit16u LinBytesPerScanLine*/ 3200,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-    /*Bit8u  LinRedMaskSize*/            8,
-@@ -1057,46 +1349,28 @@
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          800*4,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               800,
--   /*Bit16u YResolution*/               600,
-+/*Bit16u BytesPerScanLine*/ 4096,
-+/*Bit16u XResolution*/ 1024,
-+/*Bit16u YResolution*/ 768,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
-    /*Bit8u  BitsPerPixel*/              32,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  NumberOfBanks*/ 48,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        1,
-+/*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,
-@@ -1105,17 +1379,11 @@
-    /*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
-+/*Bit8u  DirectColorModeInfo*/ 0,
-    /*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,
-+/*Bit16u LinBytesPerScanLine*/ 4096,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-    /*Bit8u  LinRedMaskSize*/            8,
-@@ -1127,46 +1395,28 @@
-    /*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,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
--   /*Bit16u BytesPerScanLine*/          1024*4,
--// Mandatory information for VBE 1.2 and above
--   /*Bit16u XResolution*/               1024,
--   /*Bit16u YResolution*/               768,
-+/*Bit16u BytesPerScanLine*/ 5120,
-+/*Bit16u XResolution*/ 1280,
-+/*Bit16u YResolution*/ 1024,
-    /*Bit8u  XCharSize*/                 8,
-    /*Bit8u  YCharSize*/                 16,
-    /*Bit8u  NumberOfPlanes*/            1,
-    /*Bit8u  BitsPerPixel*/              32,
--   /*Bit8u  NumberOfBanks*/             1,
-+/*Bit8u  NumberOfBanks*/ 80,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_DIRECT_COLOR,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        1,
-+/*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,
-@@ -1175,17 +1425,11 @@
-    /*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
-+/*Bit8u  DirectColorModeInfo*/ 0,
-    /*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,
-+/*Bit16u LinBytesPerScanLine*/ 5120,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-    /*Bit8u  LinRedMaskSize*/            8,
-@@ -1197,33 +1441,17 @@
-    /*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 |
++    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
--                                        VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
--   /*Bit8u  WinAAttributes*/            VBE_WINDOW_ATTRIBUTE_READABLE |
--                                        VBE_WINDOW_ATTRIBUTE_WRITEABLE,
-+} },
-+{ 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*/               0,
-+/*Bit16u WinBSegment*/ 0x0000,
-    /*Bit32u WinFuncPtr*/                0,
-    /*Bit16u BytesPerScanLine*/          320,
--// Mandatory information for VBE 1.2 and above
-    /*Bit16u XResolution*/               320,
-    /*Bit16u YResolution*/               200,
-    /*Bit8u  XCharSize*/                 8,
-@@ -1233,9 +1461,8 @@
-    /*Bit8u  NumberOfBanks*/             1,
-    /*Bit8u  MemoryModel*/               VBE_MEMORYMODEL_PACKED_PIXEL,
-    /*Bit8u  BankSize*/                  0,
--   /*Bit8u  NumberOfImagePages*/        3,
-+/*Bit8u  NumberOfImagePages*/ 0,
-    /*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,
-@@ -1245,15 +1472,9 @@
-    /*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,
++    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
-    /*Bit32u OffScreenMemOffset*/        0,
-    /*Bit16u OffScreenMemSize*/          0,
--// Mandatory information for VBE 3.0 and above
-    /*Bit16u LinBytesPerScanLine*/       320,
-    /*Bit8u  BnkNumberOfPages*/          0,
-    /*Bit8u  LinNumberOfPages*/          0,
-@@ -1266,17 +1487,286 @@
-    /*Bit8u  LinRsvdMaskSize*/           0,
-    /*Bit8u  LinRsvdFieldPosition*/      0,
-    /*Bit32u MaxPixelClock*/             0,
--/*} ModeInfoBlock;*/
--                }
--        },
--
--/** END OF THE LIST **/
--        {
--                VBE_VESA_MODE_END_OF_LIST,
--                {
--                        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*/ 0,
-+/*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*/ 0,
-+/*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*/ 0,
-+/*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*/ 0,
-+/*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*/ 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*/ 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*/ 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*/ 0,
-+/*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,
-+} },
- };
++    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;
+ }
  
- #endif
+ // ============================================================================================
+diff -u -w vbetables-gen.c
+--- vbetables-gen.c	1970-01-01 01:00:00.000000000 +0100
++++ vbetables-gen.c	2006-06-14 00:52:18.000000000 +0200
+@@ -0,0 +1,217 @@
++/* Generate the VGABIOS VBE Tables */
++#include <stdlib.h>
++#include <stdio.h>
++
++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 pitch, r_size, r_pos, g_size, g_pos, b_size, b_pos, a_size, a_pos;
++    const char *str;
++
++    printf("/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */\n");
++    printf("static ModeInfoListItem mode_info_list[]=\n");
++    printf("{\n");
++    for(pm = modes; pm->mode != 0; pm++) {
++        printf("{ 0x%04x, /* %dx%dx%d */\n", 
++               pm->mode, pm->width, pm->height, pm->depth);
++        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);
++        
++        if (pm->depth == 4)
++            pitch = (pm->width + 7) / 8;
++        else
++            pitch = pm->width * ((pm->depth + 7) / 8);
++        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);
++            printf("/*Bit8u  BitsPerPixel*/ %d,\n", pm->depth);
++        } 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);
++        /* XXX: check */
++        printf("/*Bit8u  NumberOfImagePages*/ %d,\n", 0);
++        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);         
++        printf("/*Bit8u  DirectColorModeInfo*/ %d,\n", 0);       
++
++// Mandatory information for VBE 2.0 and above
++        printf("/*Bit32u PhysBasePtr*/ %s,\n",             
++               "VBE_DISPI_LFB_PHYSICAL_ADDRESS");
++        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;
++}

Index: vgabios.bin
===================================================================
RCS file: /sources/qemu/qemu/pc-bios/vgabios.bin,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
Binary files /tmp/cvsyHN9Iw and /tmp/cvsKfYJUX differ

Index: vgabios-cirrus.bin
===================================================================
RCS file: /sources/qemu/qemu/pc-bios/vgabios-cirrus.bin,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
Binary files /tmp/cvsL9wAOz and /tmp/cvsMNmP10 differ

                 reply	other threads:[~2006-06-14  0:59 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E1FqJig-0005Co-Rk@savannah.gnu.org \
    --to=fabrice@bellard.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.