Commit 9d0869b630baf5b94c6cb6a87520dd881ae08613

Authored by bellard
1 parent 8fa00e0f

fixed VBE protected mode calls - added VGA and VBE save restore support (not ful…

…ly tested) - automatic generation of VBE mode table


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1959 c046a42c-6fe2-441c-8c8c-71466251a162
pc-bios/vgabios-cirrus.bin
No preview for this file type
pc-bios/vgabios.bin
No preview for this file type
pc-bios/vgabios.diff
  1 +Index: Makefile
  2 +===================================================================
  3 +RCS file: /sources/vgabios/vgabios/Makefile,v
  4 +retrieving revision 1.17
  5 +diff -u -w -r1.17 Makefile
  6 +--- Makefile 6 Mar 2005 13:06:47 -0000 1.17
  7 ++++ Makefile 14 Jun 2006 00:51:06 -0000
  8 +@@ -22,7 +22,7 @@
  9 + cirrus-bios: vgabios-cirrus.bin vgabios-cirrus.debug.bin
  10 +
  11 + clean:
  12 +- /bin/rm -f biossums *.o *.s *.ld86 \
  13 ++ /bin/rm -f biossums vbetables-gen vbetables.h *.o *.s *.ld86 \
  14 + temp.awk.* vgabios*.orig _vgabios_* _vgabios-debug_* core vgabios*.bin vgabios*.txt $(RELEASE).bin *.bak
  15 +
  16 + dist-clean: clean
  17 +@@ -79,3 +79,9 @@
  18 +
  19 + biossums: biossums.c
  20 + $(CC) -o biossums biossums.c
  21 ++
  22 ++vbetables-gen: vbetables-gen.c
  23 ++ $(CC) -o vbetables-gen vbetables-gen.c
  24 ++
  25 ++vbetables.h: vbetables-gen
  26 ++ ./vbetables-gen > $@
1 Index: clext.c 27 Index: clext.c
2 =================================================================== 28 ===================================================================
3 RCS file: /sources/vgabios/vgabios/clext.c,v 29 RCS file: /sources/vgabios/vgabios/clext.c,v
4 retrieving revision 1.10 30 retrieving revision 1.10
5 diff -u -w -r1.10 clext.c 31 diff -u -w -r1.10 clext.c
6 --- clext.c 25 Mar 2006 10:19:15 -0000 1.10 32 --- clext.c 25 Mar 2006 10:19:15 -0000 1.10
7 -+++ clext.c 13 Jun 2006 16:47:23 -0000 33 ++++ clext.c 14 Jun 2006 00:51:06 -0000
8 @@ -544,6 +544,13 @@ 34 @@ -544,6 +544,13 @@
9 cirrus_set_video_mode_extended: 35 cirrus_set_video_mode_extended:
10 call cirrus_switch_mode 36 call cirrus_switch_mode
@@ -72,14 +98,289 @@ diff -u -w -r1.10 clext.c @@ -72,14 +98,289 @@ diff -u -w -r1.10 clext.c
72 cirrus_extbios_handlers: 98 cirrus_extbios_handlers:
73 ;; 80h 99 ;; 80h
74 dw cirrus_extbios_80h 100 dw cirrus_extbios_80h
  101 +Index: vbe.c
  102 +===================================================================
  103 +RCS file: /sources/vgabios/vgabios/vbe.c,v
  104 +retrieving revision 1.48
  105 +diff -u -w -r1.48 vbe.c
  106 +--- vbe.c 26 Dec 2005 19:50:26 -0000 1.48
  107 ++++ vbe.c 14 Jun 2006 00:51:07 -0000
  108 +@@ -118,21 +118,114 @@
  109 + .word VBE_VESA_MODE_END_OF_LIST
  110 + #endif
  111 +
  112 ++ .align 2
  113 + vesa_pm_start:
  114 + dw vesa_pm_set_window - vesa_pm_start
  115 +- dw vesa_pm_set_display_strt - vesa_pm_start
  116 ++ dw vesa_pm_set_display_start - vesa_pm_start
  117 + dw vesa_pm_unimplemented - vesa_pm_start
  118 +- dw 0
  119 ++ dw vesa_pm_io_ports_table - vesa_pm_start
  120 ++vesa_pm_io_ports_table:
  121 ++ dw VBE_DISPI_IOPORT_INDEX
  122 ++ dw VBE_DISPI_IOPORT_INDEX + 1
  123 ++ dw VBE_DISPI_IOPORT_DATA
  124 ++ dw VBE_DISPI_IOPORT_DATA + 1
  125 ++ dw 0xffff
  126 ++ dw 0xffff
  127 +
  128 + USE32
  129 + vesa_pm_set_window:
  130 +- mov ax, #0x4f05
  131 +- int #0x10
  132 ++ cmp bx, #0x00
  133 ++ je vesa_pm_set_display_window1
  134 ++ mov ax, #0x0100
  135 ++ ret
  136 ++vesa_pm_set_display_window1:
  137 ++ mov ax, dx
  138 ++ push dx
  139 ++ push ax
  140 ++ mov dx, # VBE_DISPI_IOPORT_INDEX
  141 ++ mov ax, # VBE_DISPI_INDEX_BANK
  142 ++ out dx, ax
  143 ++ pop ax
  144 ++ mov dx, # VBE_DISPI_IOPORT_DATA
  145 ++ out dx, ax
  146 ++ pop dx
  147 ++ mov ax, #0x004f
  148 + ret
  149 +
  150 + vesa_pm_set_display_start:
  151 +- mov ax, #0x4f07
  152 +- int #0x10
  153 ++ cmp bl, #0x80
  154 ++ je vesa_pm_set_display_start1
  155 ++ cmp bl, #0x00
  156 ++ je vesa_pm_set_display_start1
  157 ++ mov ax, #0x0100
  158 ++ ret
  159 ++vesa_pm_set_display_start1:
  160 ++; convert offset to (X, Y) coordinate
  161 ++; (would be simpler to change Bochs VBE API...)
  162 ++ push eax
  163 ++ push ecx
  164 ++ push edx
  165 ++ push esi
  166 ++ push edi
  167 ++ shl edx, #16
  168 ++ and ecx, #0xffff
  169 ++ or ecx, edx
  170 ++ shl ecx, #2
  171 ++ mov eax, ecx
  172 ++
  173 ++ push eax
  174 ++ mov dx, # VBE_DISPI_IOPORT_INDEX
  175 ++ mov ax, # VBE_DISPI_INDEX_VIRT_WIDTH
  176 ++ out dx, ax
  177 ++ mov dx, # VBE_DISPI_IOPORT_DATA
  178 ++ in ax, dx
  179 ++ movzx ecx, ax
  180 ++
  181 ++ mov dx, # VBE_DISPI_IOPORT_INDEX
  182 ++ mov ax, # VBE_DISPI_INDEX_BPP
  183 ++ out dx, ax
  184 ++ mov dx, # VBE_DISPI_IOPORT_DATA
  185 ++ in ax, dx
  186 ++ movzx esi, ax
  187 ++ pop eax
  188 ++
  189 ++ add esi, #7
  190 ++ shr esi, #3
  191 ++ imul ecx, esi
  192 ++ xor edx, edx
  193 ++ div ecx
  194 ++ mov edi, eax
  195 ++ mov eax, edx
  196 ++ xor edx, edx
  197 ++ div esi
  198 ++
  199 ++ push dx
  200 ++ push ax
  201 ++ mov dx, # VBE_DISPI_IOPORT_INDEX
  202 ++ mov ax, # VBE_DISPI_INDEX_X_OFFSET
  203 ++ out dx, ax
  204 ++ pop ax
  205 ++ mov dx, # VBE_DISPI_IOPORT_DATA
  206 ++ out dx, ax
  207 ++ pop dx
  208 ++
  209 ++ mov ax, di
  210 ++ push dx
  211 ++ push ax
  212 ++ mov dx, # VBE_DISPI_IOPORT_INDEX
  213 ++ mov ax, # VBE_DISPI_INDEX_Y_OFFSET
  214 ++ out dx, ax
  215 ++ pop ax
  216 ++ mov dx, # VBE_DISPI_IOPORT_DATA
  217 ++ out dx, ax
  218 ++ pop dx
  219 ++
  220 ++ pop edi
  221 ++ pop esi
  222 ++ pop edx
  223 ++ pop ecx
  224 ++ pop eax
  225 ++ mov ax, #0x004f
  226 + ret
  227 +
  228 + vesa_pm_unimplemented:
  229 +@@ -835,6 +928,64 @@
  230 + ASM_END
  231 +
  232 +
  233 ++Bit16u vbe_biosfn_read_video_state_size()
  234 ++{
  235 ++ return 9 * 2;
  236 ++}
  237 ++
  238 ++void vbe_biosfn_save_video_state(ES, BX)
  239 ++ Bit16u ES; Bit16u BX;
  240 ++{
  241 ++ Bit16u enable, i;
  242 ++
  243 ++ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
  244 ++ enable = inw(VBE_DISPI_IOPORT_DATA);
  245 ++ write_word(ES, BX, enable);
  246 ++ BX += 2;
  247 ++ if (!(enable & VBE_DISPI_ENABLED))
  248 ++ return;
  249 ++ for(i = VBE_DISPI_INDEX_XRES; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
  250 ++ if (i != VBE_DISPI_INDEX_ENABLE) {
  251 ++ outw(VBE_DISPI_IOPORT_INDEX, i);
  252 ++ write_word(ES, BX, inw(VBE_DISPI_IOPORT_DATA));
  253 ++ BX += 2;
  254 ++ }
  255 ++ }
  256 ++}
  257 ++
  258 ++
  259 ++void vbe_biosfn_restore_video_state(ES, BX)
  260 ++ Bit16u ES; Bit16u BX;
  261 ++{
  262 ++ Bit16u enable, i;
  263 ++
  264 ++ enable = read_word(ES, BX);
  265 ++ BX += 2;
  266 ++
  267 ++ if (!(enable & VBE_DISPI_ENABLED)) {
  268 ++ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
  269 ++ outw(VBE_DISPI_IOPORT_DATA, enable);
  270 ++ } else {
  271 ++ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_XRES);
  272 ++ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
  273 ++ BX += 2;
  274 ++ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);
  275 ++ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
  276 ++ BX += 2;
  277 ++ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);
  278 ++ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
  279 ++ BX += 2;
  280 ++ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
  281 ++ outw(VBE_DISPI_IOPORT_DATA, enable);
  282 ++
  283 ++ for(i = VBE_DISPI_INDEX_BANK; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
  284 ++ outw(VBE_DISPI_IOPORT_INDEX, i);
  285 ++ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
  286 ++ BX += 2;
  287 ++ }
  288 ++ }
  289 ++}
  290 ++
  291 + /** Function 04h - Save/Restore State
  292 + *
  293 + * Input:
  294 +@@ -849,10 +1000,48 @@
  295 + * BX = Number of 64-byte blocks to hold the state buffer (if DL=00h)
  296 + *
  297 + */
  298 +-void vbe_biosfn_save_restore_state(AX, DL, CX, ES, BX)
  299 ++void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX)
  300 ++Bit16u *AX; Bit16u CX; Bit16u DX; Bit16u ES; Bit16u *BX;
  301 + {
  302 +-}
  303 ++ Bit16u ss=get_SS();
  304 ++ Bit16u result, val;
  305 +
  306 ++ result = 0x4f;
  307 ++ switch(GET_DL()) {
  308 ++ case 0x00:
  309 ++ val = biosfn_read_video_state_size2(CX);
  310 ++#ifdef DEBUG
  311 ++ printf("VGA state size=%x\n", val);
  312 ++#endif
  313 ++ if (CX & 8)
  314 ++ val += vbe_biosfn_read_video_state_size();
  315 ++ write_word(ss, BX, val);
  316 ++ break;
  317 ++ case 0x01:
  318 ++ val = read_word(ss, BX);
  319 ++ val = biosfn_save_video_state(CX, ES, val);
  320 ++#ifdef DEBUG
  321 ++ printf("VGA save_state offset=%x\n", val);
  322 ++#endif
  323 ++ if (CX & 8)
  324 ++ vbe_biosfn_save_video_state(ES, val);
  325 ++ break;
  326 ++ case 0x02:
  327 ++ val = read_word(ss, BX);
  328 ++ val = biosfn_restore_video_state(CX, ES, val);
  329 ++#ifdef DEBUG
  330 ++ printf("VGA restore_state offset=%x\n", val);
  331 ++#endif
  332 ++ if (CX & 8)
  333 ++ vbe_biosfn_restore_video_state(ES, val);
  334 ++ break;
  335 ++ default:
  336 ++ // function failed
  337 ++ result = 0x100;
  338 ++ break;
  339 ++ }
  340 ++ write_word(ss, AX, result);
  341 ++}
  342 +
  343 + /** Function 05h - Display Window Control
  344 + *
  345 +@@ -1090,7 +1279,7 @@
  346 + */
  347 + ASM_START
  348 + vbe_biosfn_return_protected_mode_interface:
  349 +- test bx, bx
  350 ++ test bl, bl
  351 + jnz _fail
  352 + mov di, #0xc000
  353 + mov es, di
75 Index: vbe.h 354 Index: vbe.h
76 =================================================================== 355 ===================================================================
77 RCS file: /sources/vgabios/vgabios/vbe.h,v 356 RCS file: /sources/vgabios/vgabios/vbe.h,v
78 retrieving revision 1.24 357 retrieving revision 1.24
79 diff -u -w -r1.24 vbe.h 358 diff -u -w -r1.24 vbe.h
80 --- vbe.h 9 May 2004 20:31:31 -0000 1.24 359 --- vbe.h 9 May 2004 20:31:31 -0000 1.24
81 -+++ vbe.h 13 Jun 2006 16:47:24 -0000  
82 -@@ -193,6 +193,10 @@ 360 ++++ vbe.h 14 Jun 2006 00:51:07 -0000
  361 +@@ -14,7 +14,7 @@
  362 + void vbe_biosfn_return_controller_information(AX, ES, DI);
  363 + void vbe_biosfn_return_mode_information(AX, CX, ES, DI);
  364 + void vbe_biosfn_set_mode(AX, BX, ES, DI);
  365 +-void vbe_biosfn_save_restore_state(AX, DL, CX, ES, BX);
  366 ++void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX);
  367 + void vbe_biosfn_set_get_palette_data(AX);
  368 + void vbe_biosfn_return_protected_mode_interface(AX);
  369 +
  370 +@@ -151,6 +151,12 @@
  371 + Bit8u Reserved[189];
  372 + } ModeInfoBlock;
  373 +
  374 ++typedef struct ModeInfoListItem
  375 ++{
  376 ++ Bit16u mode;
  377 ++ ModeInfoBlockCompact info;
  378 ++} ModeInfoListItem;
  379 ++
  380 + // VBE Return Status Info
  381 + // AL
  382 + #define VBE_RETURN_STATUS_SUPPORTED 0x4F
  383 +@@ -193,6 +199,10 @@
83 #define VBE_VESA_MODE_1280X1024X1555 0x119 384 #define VBE_VESA_MODE_1280X1024X1555 0x119
84 #define VBE_VESA_MODE_1280X1024X565 0x11A 385 #define VBE_VESA_MODE_1280X1024X565 0x11A
85 #define VBE_VESA_MODE_1280X1024X888 0x11B 386 #define VBE_VESA_MODE_1280X1024X888 0x11B
@@ -90,7 +391,7 @@ diff -u -w -r1.24 vbe.h @@ -90,7 +391,7 @@ diff -u -w -r1.24 vbe.h
90 391
91 // BOCHS/PLEX86 'own' mode numbers 392 // BOCHS/PLEX86 'own' mode numbers
92 #define VBE_OWN_MODE_320X200X8888 0x140 393 #define VBE_OWN_MODE_320X200X8888 0x140
93 -@@ -202,6 +206,12 @@ 394 +@@ -202,6 +212,12 @@
94 #define VBE_OWN_MODE_1024X768X8888 0x144 395 #define VBE_OWN_MODE_1024X768X8888 0x144
95 #define VBE_OWN_MODE_1280X1024X8888 0x145 396 #define VBE_OWN_MODE_1280X1024X8888 0x145
96 #define VBE_OWN_MODE_320X200X8 0x146 397 #define VBE_OWN_MODE_320X200X8 0x146
@@ -103,7 +404,7 @@ diff -u -w -r1.24 vbe.h @@ -103,7 +404,7 @@ diff -u -w -r1.24 vbe.h
103 404
104 #define VBE_VESA_MODE_END_OF_LIST 0xFFFF 405 #define VBE_VESA_MODE_END_OF_LIST 0xFFFF
105 406
106 -@@ -259,7 +269,7 @@ 407 +@@ -259,7 +275,7 @@
107 // like 0xE0000000 408 // like 0xE0000000
108 409
109 410
@@ -112,2367 +413,484 @@ diff -u -w -r1.24 vbe.h @@ -112,2367 +413,484 @@ diff -u -w -r1.24 vbe.h
112 413
113 #define VBE_DISPI_BANK_ADDRESS 0xA0000 414 #define VBE_DISPI_BANK_ADDRESS 0xA0000
114 #define VBE_DISPI_BANK_SIZE_KB 64 415 #define VBE_DISPI_BANK_SIZE_KB 64
115 -Index: vbetables.h 416 +Index: vgabios.c
116 =================================================================== 417 ===================================================================
117 -RCS file: /sources/vgabios/vgabios/vbetables.h,v  
118 -retrieving revision 1.24  
119 -diff -u -w -r1.24 vbetables.h  
120 ---- vbetables.h 22 Jul 2004 18:37:29 -0000 1.24  
121 -+++ vbetables.h 13 Jun 2006 16:47:24 -0000  
122 -@@ -14,46 +14,29 @@  
123 - ModeInfoBlockCompact info;  
124 - } ModeInfoListItem; 418 +RCS file: /sources/vgabios/vgabios/vgabios.c,v
  419 +retrieving revision 1.64
  420 +diff -u -w -r1.64 vgabios.c
  421 +--- vgabios.c 25 Mar 2006 10:19:16 -0000 1.64
  422 ++++ vgabios.c 14 Jun 2006 00:51:07 -0000
  423 +@@ -109,8 +109,8 @@
  424 + static void biosfn_write_string();
  425 + static void biosfn_read_state_info();
  426 + static void biosfn_read_video_state_size();
  427 +-static void biosfn_save_video_state();
  428 +-static void biosfn_restore_video_state();
  429 ++static Bit16u biosfn_save_video_state();
  430 ++static Bit16u biosfn_restore_video_state();
  431 + extern Bit8u video_save_pointer_table[];
  432 +
  433 + // This is for compiling with gcc2 and gcc3
  434 +@@ -748,12 +748,7 @@
  435 + vbe_biosfn_set_mode(&AX,BX,ES,DI);
  436 + break;
  437 + case 0x04:
  438 +- //FIXME
  439 +-#ifdef DEBUG
  440 +- unimplemented();
  441 +-#endif
  442 +- // function failed
  443 +- AX=0x100;
  444 ++ vbe_biosfn_save_restore_state(&AX, CX, DX, ES, &BX);
  445 + break;
  446 + case 0x09:
  447 + //FIXME
  448 +@@ -3138,23 +3133,215 @@
  449 + }
125 450
126 --// FIXME: check all member variables to be correct for the different modi  
127 --// FIXME: add more modi  
128 - static ModeInfoListItem mode_info_list[]= 451 + // --------------------------------------------------------------------------------------------
  452 +-static void biosfn_read_video_state_size (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
  453 ++// --------------------------------------------------------------------------------------------
  454 ++static Bit16u biosfn_read_video_state_size2 (CX)
  455 ++ Bit16u CX;
129 { 456 {
130 -- {  
131 -- VBE_VESA_MODE_640X400X8,  
132 -- {  
133 --/*typedef struct ModeInfoBlock  
134 --{*/  
135 --// Mandatory information for all VBE revisions  
136 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
137 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
138 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
139 --#ifdef VBE_HAVE_LFB  
140 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
141 --#endif  
142 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
143 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
144 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
145 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
146 -+{ 0x0100, /* 640x400x8 */  
147 -+{ /*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,  
148 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
149 - /*Bit8u WinBAttributes*/ 0,  
150 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
151 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
152 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
153 -- /*Bit16u WinBSegment*/ 0,  
154 -+/*Bit16u WinBSegment*/ 0x0000,  
155 - /*Bit32u WinFuncPtr*/ 0,  
156 - /*Bit16u BytesPerScanLine*/ 640,  
157 --// Mandatory information for VBE 1.2 and above  
158 - /*Bit16u XResolution*/ 640,  
159 - /*Bit16u YResolution*/ 400,  
160 - /*Bit8u XCharSize*/ 8,  
161 - /*Bit8u YCharSize*/ 16,  
162 - /*Bit8u NumberOfPlanes*/ 1,  
163 - /*Bit8u BitsPerPixel*/ 8,  
164 -- /*Bit8u NumberOfBanks*/ 4, // 640x400/64kb == 4  
165 -+/*Bit8u NumberOfBanks*/ 4,  
166 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,  
167 - /*Bit8u BankSize*/ 0,  
168 -- /*Bit8u NumberOfImagePages*/ 15,  
169 -+/*Bit8u NumberOfImagePages*/ 0,  
170 - /*Bit8u Reserved_page*/ 0,  
171 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
172 - /*Bit8u RedMaskSize*/ 0,  
173 - /*Bit8u RedFieldPosition*/ 0,  
174 - /*Bit8u GreenMaskSize*/ 0,  
175 -@@ -63,15 +46,9 @@  
176 - /*Bit8u RsvdMaskSize*/ 0,  
177 - /*Bit8u RsvdFieldPosition*/ 0,  
178 - /*Bit8u DirectColorModeInfo*/ 0,  
179 --// Mandatory information for VBE 2.0 and above  
180 --#ifdef VBE_HAVE_LFB  
181 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
182 --#else  
183 -- /*Bit32u PhysBasePtr*/ 0,  
184 --#endif  
185 - /*Bit32u OffScreenMemOffset*/ 0,  
186 - /*Bit16u OffScreenMemSize*/ 0,  
187 --// Mandatory information for VBE 3.0 and above  
188 - /*Bit16u LinBytesPerScanLine*/ 640,  
189 - /*Bit8u BnkNumberOfPages*/ 0,  
190 - /*Bit8u LinNumberOfPages*/ 0,  
191 -@@ -84,45 +61,28 @@  
192 - /*Bit8u LinRsvdMaskSize*/ 0,  
193 - /*Bit8u LinRsvdFieldPosition*/ 0,  
194 - /*Bit32u MaxPixelClock*/ 0,  
195 --/*} ModeInfoBlock;*/  
196 -- }  
197 -- },  
198 --  
199 -- {  
200 -- VBE_VESA_MODE_640X480X8,  
201 -- {  
202 --/*typedef struct ModeInfoBlock  
203 --{*/  
204 --// Mandatory information for all VBE revisions  
205 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
206 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
207 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
208 --#ifdef VBE_HAVE_LFB  
209 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
210 --#endif  
211 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
212 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE |  
213 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
214 -+} },  
215 -+{ 0x0101, /* 640x480x8 */  
216 -+{ /*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,  
217 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
218 - /*Bit8u WinBAttributes*/ 0,  
219 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
220 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
221 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
222 -- /*Bit16u WinBSegment*/ 0,  
223 -+/*Bit16u WinBSegment*/ 0x0000,  
224 - /*Bit32u WinFuncPtr*/ 0,  
225 - /*Bit16u BytesPerScanLine*/ 640,  
226 --// Mandatory information for VBE 1.2 and above  
227 - /*Bit16u XResolution*/ 640,  
228 - /*Bit16u YResolution*/ 480,  
229 - /*Bit8u XCharSize*/ 8,  
230 - /*Bit8u YCharSize*/ 16,  
231 - /*Bit8u NumberOfPlanes*/ 1,  
232 - /*Bit8u BitsPerPixel*/ 8,  
233 -- /*Bit8u NumberOfBanks*/ 5, // 640x480/64kb == 5  
234 -+/*Bit8u NumberOfBanks*/ 5,  
235 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,  
236 - /*Bit8u BankSize*/ 0,  
237 -- /*Bit8u NumberOfImagePages*/ 11,  
238 -+/*Bit8u NumberOfImagePages*/ 0,  
239 - /*Bit8u Reserved_page*/ 0,  
240 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
241 - /*Bit8u RedMaskSize*/ 0,  
242 - /*Bit8u RedFieldPosition*/ 0,  
243 - /*Bit8u GreenMaskSize*/ 0,  
244 -@@ -132,15 +92,9 @@  
245 - /*Bit8u RsvdMaskSize*/ 0,  
246 - /*Bit8u RsvdFieldPosition*/ 0,  
247 - /*Bit8u DirectColorModeInfo*/ 0,  
248 --// Mandatory information for VBE 2.0 and above  
249 --#ifdef VBE_HAVE_LFB  
250 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
251 --#else  
252 -- /*Bit32u PhysBasePtr*/ 0,  
253 --#endif  
254 - /*Bit32u OffScreenMemOffset*/ 0,  
255 - /*Bit16u OffScreenMemSize*/ 0,  
256 --// Mandatory information for VBE 3.0 and above  
257 - /*Bit16u LinBytesPerScanLine*/ 640,  
258 - /*Bit8u BnkNumberOfPages*/ 0,  
259 - /*Bit8u LinNumberOfPages*/ 0,  
260 -@@ -153,44 +107,28 @@  
261 - /*Bit8u LinRsvdMaskSize*/ 0,  
262 - /*Bit8u LinRsvdFieldPosition*/ 0,  
263 - /*Bit32u MaxPixelClock*/ 0,  
264 --/*} ModeInfoBlock;*/  
265 -- }  
266 -- },  
267 --  
268 -- {  
269 -- VBE_VESA_MODE_800X600X4,  
270 -- {  
271 --/*typedef struct ModeInfoBlock  
272 --{*/  
273 --// Mandatory information for all VBE revisions  
274 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
275 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
276 -- VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT |  
277 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
278 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
279 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
280 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
281 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
282 -+} },  
283 -+{ 0x0102, /* 800x600x4 */  
284 -+{ /*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,  
285 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
286 - /*Bit8u WinBAttributes*/ 0,  
287 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
288 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
289 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
290 -- /*Bit16u WinBSegment*/ 0,  
291 -+/*Bit16u WinBSegment*/ 0x0000,  
292 - /*Bit32u WinFuncPtr*/ 0,  
293 - /*Bit16u BytesPerScanLine*/ 100,  
294 --// Mandatory information for VBE 1.2 and above  
295 - /*Bit16u XResolution*/ 800,  
296 - /*Bit16u YResolution*/ 600,  
297 - /*Bit8u XCharSize*/ 8,  
298 - /*Bit8u YCharSize*/ 16,  
299 - /*Bit8u NumberOfPlanes*/ 4,  
300 - /*Bit8u BitsPerPixel*/ 4,  
301 -- /*Bit8u NumberOfBanks*/ 16,  
302 -+/*Bit8u NumberOfBanks*/ 1,  
303 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PLANAR,  
304 - /*Bit8u BankSize*/ 0,  
305 -- /*Bit8u NumberOfImagePages*/ 15,  
306 -+/*Bit8u NumberOfImagePages*/ 0,  
307 - /*Bit8u Reserved_page*/ 0,  
308 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
309 - /*Bit8u RedMaskSize*/ 0,  
310 - /*Bit8u RedFieldPosition*/ 0,  
311 - /*Bit8u GreenMaskSize*/ 0,  
312 -@@ -200,11 +138,9 @@  
313 - /*Bit8u RsvdMaskSize*/ 0,  
314 - /*Bit8u RsvdFieldPosition*/ 0,  
315 - /*Bit8u DirectColorModeInfo*/ 0,  
316 --// Mandatory information for VBE 2.0 and above  
317 -- /*Bit32u PhysBasePtr*/ 0,  
318 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
319 - /*Bit32u OffScreenMemOffset*/ 0,  
320 - /*Bit16u OffScreenMemSize*/ 0,  
321 --// Mandatory information for VBE 3.0 and above  
322 - /*Bit16u LinBytesPerScanLine*/ 100,  
323 - /*Bit8u BnkNumberOfPages*/ 0,  
324 - /*Bit8u LinNumberOfPages*/ 0,  
325 -@@ -217,46 +153,28 @@  
326 - /*Bit8u LinRsvdMaskSize*/ 0,  
327 - /*Bit8u LinRsvdFieldPosition*/ 0,  
328 - /*Bit32u MaxPixelClock*/ 0,  
329 --/*} ModeInfoBlock;*/  
330 -- }  
331 -- },  
332 --  
333 -- {  
334 -- VBE_VESA_MODE_800X600X8,  
335 -- {  
336 --/*typedef struct ModeInfoBlock  
337 --{*/  
338 --// Mandatory information for all VBE revisions  
339 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
340 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
341 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
342 --#ifdef VBE_HAVE_LFB  
343 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
344 --#endif  
345 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
346 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
347 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
348 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
349 -+} },  
350 -+{ 0x0103, /* 800x600x8 */  
351 -+{ /*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,  
352 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
353 - /*Bit8u WinBAttributes*/ 0,  
354 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
355 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
356 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
357 -- /*Bit16u WinBSegment*/ 0,  
358 -+/*Bit16u WinBSegment*/ 0x0000,  
359 - /*Bit32u WinFuncPtr*/ 0,  
360 - /*Bit16u BytesPerScanLine*/ 800,  
361 --// Mandatory information for VBE 1.2 and above  
362 - /*Bit16u XResolution*/ 800,  
363 - /*Bit16u YResolution*/ 600,  
364 - /*Bit8u XCharSize*/ 8,  
365 - /*Bit8u YCharSize*/ 16,  
366 - /*Bit8u NumberOfPlanes*/ 1,  
367 - /*Bit8u BitsPerPixel*/ 8,  
368 -- /*Bit8u NumberOfBanks*/ 8, // 800x600/64kb == 8  
369 -+/*Bit8u NumberOfBanks*/ 8,  
370 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,  
371 - /*Bit8u BankSize*/ 0,  
372 -- /*Bit8u NumberOfImagePages*/ 7,  
373 -+/*Bit8u NumberOfImagePages*/ 0,  
374 - /*Bit8u Reserved_page*/ 0,  
375 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
376 - /*Bit8u RedMaskSize*/ 0,  
377 - /*Bit8u RedFieldPosition*/ 0,  
378 - /*Bit8u GreenMaskSize*/ 0,  
379 -@@ -266,15 +184,9 @@  
380 - /*Bit8u RsvdMaskSize*/ 0,  
381 - /*Bit8u RsvdFieldPosition*/ 0,  
382 - /*Bit8u DirectColorModeInfo*/ 0,  
383 --// Mandatory information for VBE 2.0 and above  
384 --#ifdef VBE_HAVE_LFB  
385 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
386 --#else  
387 -- /*Bit32u PhysBasePtr*/ 0,  
388 --#endif  
389 - /*Bit32u OffScreenMemOffset*/ 0,  
390 - /*Bit16u OffScreenMemSize*/ 0,  
391 --// Mandatory information for VBE 3.0 and above  
392 - /*Bit16u LinBytesPerScanLine*/ 800,  
393 - /*Bit8u BnkNumberOfPages*/ 0,  
394 - /*Bit8u LinNumberOfPages*/ 0,  
395 -@@ -287,46 +199,28 @@  
396 - /*Bit8u LinRsvdMaskSize*/ 0,  
397 - /*Bit8u LinRsvdFieldPosition*/ 0,  
398 - /*Bit32u MaxPixelClock*/ 0,  
399 --/*} ModeInfoBlock;*/  
400 -- }  
401 -- },  
402 --  
403 -- {  
404 -- VBE_VESA_MODE_1024X768X8,  
405 -- {  
406 --/*typedef struct ModeInfoBlock  
407 --{*/  
408 --// Mandatory information for all VBE revisions  
409 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
410 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
411 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
412 --#ifdef VBE_HAVE_LFB  
413 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
414 --#endif  
415 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
416 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
417 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
418 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
419 -+} },  
420 -+{ 0x0105, /* 1024x768x8 */  
421 -+{ /*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,  
422 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
423 - /*Bit8u WinBAttributes*/ 0,  
424 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
425 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
426 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
427 -- /*Bit16u WinBSegment*/ 0,  
428 -+/*Bit16u WinBSegment*/ 0x0000,  
429 - /*Bit32u WinFuncPtr*/ 0,  
430 - /*Bit16u BytesPerScanLine*/ 1024,  
431 --// Mandatory information for VBE 1.2 and above  
432 - /*Bit16u XResolution*/ 1024,  
433 - /*Bit16u YResolution*/ 768,  
434 - /*Bit8u XCharSize*/ 8,  
435 - /*Bit8u YCharSize*/ 16,  
436 - /*Bit8u NumberOfPlanes*/ 1,  
437 - /*Bit8u BitsPerPixel*/ 8,  
438 -- /*Bit8u NumberOfBanks*/ 12, // 1024x768/64kb == 12  
439 -+/*Bit8u NumberOfBanks*/ 12,  
440 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,  
441 - /*Bit8u BankSize*/ 0,  
442 -- /*Bit8u NumberOfImagePages*/ 3,  
443 -+/*Bit8u NumberOfImagePages*/ 0,  
444 - /*Bit8u Reserved_page*/ 0,  
445 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
446 - /*Bit8u RedMaskSize*/ 0,  
447 - /*Bit8u RedFieldPosition*/ 0,  
448 - /*Bit8u GreenMaskSize*/ 0,  
449 -@@ -336,15 +230,9 @@  
450 - /*Bit8u RsvdMaskSize*/ 0,  
451 - /*Bit8u RsvdFieldPosition*/ 0,  
452 - /*Bit8u DirectColorModeInfo*/ 0,  
453 --// Mandatory information for VBE 2.0 and above  
454 --#ifdef VBE_HAVE_LFB  
455 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
456 --#else  
457 -- /*Bit32u PhysBasePtr*/ 0,  
458 --#endif  
459 - /*Bit32u OffScreenMemOffset*/ 0,  
460 - /*Bit16u OffScreenMemSize*/ 0,  
461 --// Mandatory information for VBE 3.0 and above  
462 - /*Bit16u LinBytesPerScanLine*/ 1024,  
463 - /*Bit8u BnkNumberOfPages*/ 0,  
464 - /*Bit8u LinNumberOfPages*/ 0,  
465 -@@ -357,116 +245,74 @@  
466 - /*Bit8u LinRsvdMaskSize*/ 0,  
467 - /*Bit8u LinRsvdFieldPosition*/ 0,  
468 - /*Bit32u MaxPixelClock*/ 0,  
469 --/*} ModeInfoBlock;*/  
470 -- }  
471 -- },  
472 --  
473 -- {  
474 -- VBE_VESA_MODE_640X480X1555,  
475 -- {  
476 --/*typedef struct ModeInfoBlock  
477 --{*/  
478 --// Mandatory information for all VBE revisions  
479 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
480 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
481 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
482 --#ifdef VBE_HAVE_LFB  
483 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
484 --#endif  
485 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
486 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
487 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
488 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
489 -+} },  
490 -+{ 0x0107, /* 1280x1024x8 */  
491 -+{ /*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,  
492 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
493 - /*Bit8u WinBAttributes*/ 0,  
494 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
495 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
496 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
497 -- /*Bit16u WinBSegment*/ 0,  
498 -+/*Bit16u WinBSegment*/ 0x0000,  
499 - /*Bit32u WinFuncPtr*/ 0,  
500 -- /*Bit16u BytesPerScanLine*/ 640*2,  
501 --// Mandatory information for VBE 1.2 and above  
502 -- /*Bit16u XResolution*/ 640,  
503 -- /*Bit16u YResolution*/ 480,  
504 -+/*Bit16u BytesPerScanLine*/ 1280,  
505 -+/*Bit16u XResolution*/ 1280,  
506 -+/*Bit16u YResolution*/ 1024,  
507 - /*Bit8u XCharSize*/ 8,  
508 - /*Bit8u YCharSize*/ 16,  
509 - /*Bit8u NumberOfPlanes*/ 1,  
510 -- /*Bit8u BitsPerPixel*/ 15,  
511 -- /*Bit8u NumberOfBanks*/ 1,  
512 -- /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
513 -+/*Bit8u BitsPerPixel*/ 8,  
514 -+/*Bit8u NumberOfBanks*/ 20,  
515 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,  
516 - /*Bit8u BankSize*/ 0,  
517 -- /*Bit8u NumberOfImagePages*/ 5,  
518 -+/*Bit8u NumberOfImagePages*/ 0,  
519 - /*Bit8u Reserved_page*/ 0,  
520 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
521 -- /*Bit8u RedMaskSize*/ 5,  
522 -- /*Bit8u RedFieldPosition*/ 10,  
523 -- /*Bit8u GreenMaskSize*/ 5,  
524 -- /*Bit8u GreenFieldPosition*/ 5,  
525 -- /*Bit8u BlueMaskSize*/ 5,  
526 -+/*Bit8u RedMaskSize*/ 0,  
527 -+/*Bit8u RedFieldPosition*/ 0,  
528 -+/*Bit8u GreenMaskSize*/ 0,  
529 -+/*Bit8u GreenFieldPosition*/ 0,  
530 -+/*Bit8u BlueMaskSize*/ 0,  
531 - /*Bit8u BlueFieldPosition*/ 0,  
532 -- /*Bit8u RsvdMaskSize*/ 1,  
533 -- /*Bit8u RsvdFieldPosition*/ 15,  
534 -+/*Bit8u RsvdMaskSize*/ 0,  
535 -+/*Bit8u RsvdFieldPosition*/ 0,  
536 - /*Bit8u DirectColorModeInfo*/ 0,  
537 --// Mandatory information for VBE 2.0 and above  
538 --#ifdef VBE_HAVE_LFB  
539 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
540 --#else  
541 -- /*Bit32u PhysBasePtr*/ 0,  
542 --#endif  
543 - /*Bit32u OffScreenMemOffset*/ 0,  
544 - /*Bit16u OffScreenMemSize*/ 0,  
545 --// Mandatory information for VBE 3.0 and above  
546 -- /*Bit16u LinBytesPerScanLine*/ 640*2,  
547 -+/*Bit16u LinBytesPerScanLine*/ 1280,  
548 - /*Bit8u BnkNumberOfPages*/ 0,  
549 - /*Bit8u LinNumberOfPages*/ 0,  
550 -- /*Bit8u LinRedMaskSize*/ 5,  
551 -- /*Bit8u LinRedFieldPosition*/ 10,  
552 -+/*Bit8u LinRedMaskSize*/ 0,  
553 -+/*Bit8u LinRedFieldPosition*/ 0,  
554 - /*Bit8u LinGreenMaskSize*/ 0,  
555 -- /*Bit8u LinGreenFieldPosition*/ 5,  
556 -- /*Bit8u LinBlueMaskSize*/ 5,  
557 -+/*Bit8u LinGreenFieldPosition*/ 0,  
558 -+/*Bit8u LinBlueMaskSize*/ 0,  
559 - /*Bit8u LinBlueFieldPosition*/ 0,  
560 -- /*Bit8u LinRsvdMaskSize*/ 1,  
561 -- /*Bit8u LinRsvdFieldPosition*/ 15,  
562 -+/*Bit8u LinRsvdMaskSize*/ 0,  
563 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
564 - /*Bit32u MaxPixelClock*/ 0,  
565 --/*} ModeInfoBlock;*/  
566 -- }  
567 -- },  
568 --  
569 -- {  
570 -- VBE_VESA_MODE_800X600X1555,  
571 -- {  
572 --/*typedef struct ModeInfoBlock  
573 --{*/  
574 --// Mandatory information for all VBE revisions  
575 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
576 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
577 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
578 --#ifdef VBE_HAVE_LFB  
579 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
580 --#endif  
581 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
582 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
583 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
584 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
585 -+} },  
586 -+{ 0x010d, /* 320x200x15 */  
587 -+{ /*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,  
588 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
589 - /*Bit8u WinBAttributes*/ 0,  
590 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
591 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
592 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
593 -- /*Bit16u WinBSegment*/ 0,  
594 -+/*Bit16u WinBSegment*/ 0x0000,  
595 - /*Bit32u WinFuncPtr*/ 0,  
596 -- /*Bit16u BytesPerScanLine*/ 800*2,  
597 --// Mandatory information for VBE 1.2 and above  
598 -- /*Bit16u XResolution*/ 800,  
599 -- /*Bit16u YResolution*/ 600,  
600 -+/*Bit16u BytesPerScanLine*/ 640,  
601 -+/*Bit16u XResolution*/ 320,  
602 -+/*Bit16u YResolution*/ 200,  
603 - /*Bit8u XCharSize*/ 8,  
604 - /*Bit8u YCharSize*/ 16,  
605 - /*Bit8u NumberOfPlanes*/ 1,  
606 - /*Bit8u BitsPerPixel*/ 15,  
607 -- /*Bit8u NumberOfBanks*/ 1,  
608 -+/*Bit8u NumberOfBanks*/ 2,  
609 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
610 - /*Bit8u BankSize*/ 0,  
611 -- /*Bit8u NumberOfImagePages*/ 3,  
612 -+/*Bit8u NumberOfImagePages*/ 0,  
613 - /*Bit8u Reserved_page*/ 0,  
614 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
615 - /*Bit8u RedMaskSize*/ 5,  
616 - /*Bit8u RedFieldPosition*/ 10,  
617 - /*Bit8u GreenMaskSize*/ 5,  
618 -@@ -476,16 +322,10 @@  
619 - /*Bit8u RsvdMaskSize*/ 1,  
620 - /*Bit8u RsvdFieldPosition*/ 15,  
621 - /*Bit8u DirectColorModeInfo*/ 0,  
622 --// Mandatory information for VBE 2.0 and above  
623 --#ifdef VBE_HAVE_LFB  
624 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
625 --#else  
626 -- /*Bit32u PhysBasePtr*/ 0,  
627 --#endif  
628 - /*Bit32u OffScreenMemOffset*/ 0,  
629 - /*Bit16u OffScreenMemSize*/ 0,  
630 --// Mandatory information for VBE 3.0 and above  
631 -- /*Bit16u LinBytesPerScanLine*/ 800*2,  
632 -+/*Bit16u LinBytesPerScanLine*/ 640,  
633 - /*Bit8u BnkNumberOfPages*/ 0,  
634 - /*Bit8u LinNumberOfPages*/ 0,  
635 - /*Bit8u LinRedMaskSize*/ 5,  
636 -@@ -497,256 +337,166 @@  
637 - /*Bit8u LinRsvdMaskSize*/ 1,  
638 - /*Bit8u LinRsvdFieldPosition*/ 15,  
639 - /*Bit32u MaxPixelClock*/ 0,  
640 --/*} ModeInfoBlock;*/  
641 -- }  
642 -- },  
643 --  
644 -- {  
645 -- VBE_VESA_MODE_1024X768X1555,  
646 -- {  
647 --/*typedef struct ModeInfoBlock  
648 --{*/  
649 --// Mandatory information for all VBE revisions  
650 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
651 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
652 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
653 --#ifdef VBE_HAVE_LFB  
654 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
655 --#endif  
656 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
657 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
658 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
659 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
660 -+} },  
661 -+{ 0x010e, /* 320x200x16 */  
662 -+{ /*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,  
663 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
664 - /*Bit8u WinBAttributes*/ 0,  
665 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
666 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
667 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
668 -- /*Bit16u WinBSegment*/ 0,  
669 -+/*Bit16u WinBSegment*/ 0x0000,  
670 - /*Bit32u WinFuncPtr*/ 0,  
671 -- /*Bit16u BytesPerScanLine*/ 1024*2,  
672 --// Mandatory information for VBE 1.2 and above  
673 -- /*Bit16u XResolution*/ 1024,  
674 -- /*Bit16u YResolution*/ 768,  
675 -+/*Bit16u BytesPerScanLine*/ 640,  
676 -+/*Bit16u XResolution*/ 320,  
677 -+/*Bit16u YResolution*/ 200,  
678 - /*Bit8u XCharSize*/ 8,  
679 - /*Bit8u YCharSize*/ 16,  
680 - /*Bit8u NumberOfPlanes*/ 1,  
681 -- /*Bit8u BitsPerPixel*/ 15,  
682 -- /*Bit8u NumberOfBanks*/ 1,  
683 -+/*Bit8u BitsPerPixel*/ 16,  
684 -+/*Bit8u NumberOfBanks*/ 2,  
685 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
686 - /*Bit8u BankSize*/ 0,  
687 -- /*Bit8u NumberOfImagePages*/ 1,  
688 -+/*Bit8u NumberOfImagePages*/ 0,  
689 - /*Bit8u Reserved_page*/ 0,  
690 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
691 - /*Bit8u RedMaskSize*/ 5,  
692 -- /*Bit8u RedFieldPosition*/ 10,  
693 -- /*Bit8u GreenMaskSize*/ 5,  
694 -+/*Bit8u RedFieldPosition*/ 11,  
695 -+/*Bit8u GreenMaskSize*/ 6,  
696 - /*Bit8u GreenFieldPosition*/ 5,  
697 - /*Bit8u BlueMaskSize*/ 5,  
698 - /*Bit8u BlueFieldPosition*/ 0,  
699 -- /*Bit8u RsvdMaskSize*/ 1,  
700 -- /*Bit8u RsvdFieldPosition*/ 15,  
701 -+/*Bit8u RsvdMaskSize*/ 0,  
702 -+/*Bit8u RsvdFieldPosition*/ 0,  
703 - /*Bit8u DirectColorModeInfo*/ 0,  
704 --// Mandatory information for VBE 2.0 and above  
705 --#ifdef VBE_HAVE_LFB  
706 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
707 --#else  
708 -- /*Bit32u PhysBasePtr*/ 0,  
709 --#endif  
710 - /*Bit32u OffScreenMemOffset*/ 0,  
711 - /*Bit16u OffScreenMemSize*/ 0,  
712 --// Mandatory information for VBE 3.0 and above  
713 -- /*Bit16u LinBytesPerScanLine*/ 1024*2,  
714 -+/*Bit16u LinBytesPerScanLine*/ 640,  
715 - /*Bit8u BnkNumberOfPages*/ 0,  
716 - /*Bit8u LinNumberOfPages*/ 0,  
717 - /*Bit8u LinRedMaskSize*/ 5,  
718 -- /*Bit8u LinRedFieldPosition*/ 10,  
719 -- /*Bit8u LinGreenMaskSize*/ 5,  
720 -+/*Bit8u LinRedFieldPosition*/ 11,  
721 -+/*Bit8u LinGreenMaskSize*/ 6,  
722 - /*Bit8u LinGreenFieldPosition*/ 5,  
723 - /*Bit8u LinBlueMaskSize*/ 5,  
724 - /*Bit8u LinBlueFieldPosition*/ 0,  
725 -- /*Bit8u LinRsvdMaskSize*/ 1,  
726 -- /*Bit8u LinRsvdFieldPosition*/ 15,  
727 -+/*Bit8u LinRsvdMaskSize*/ 0,  
728 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
729 - /*Bit32u MaxPixelClock*/ 0,  
730 --/*} ModeInfoBlock;*/  
731 -- }  
732 -- },  
733 --  
734 -- {  
735 -- VBE_VESA_MODE_640X480X565,  
736 -- {  
737 --/*typedef struct ModeInfoBlock  
738 --{*/  
739 --// Mandatory information for all VBE revisions  
740 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
741 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
742 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
743 --#ifdef VBE_HAVE_LFB  
744 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
745 --#endif  
746 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
747 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
748 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
749 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
750 -+} },  
751 -+{ 0x010f, /* 320x200x24 */  
752 -+{ /*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,  
753 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
754 - /*Bit8u WinBAttributes*/ 0,  
755 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
756 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
757 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
758 -- /*Bit16u WinBSegment*/ 0,  
759 -+/*Bit16u WinBSegment*/ 0x0000,  
760 - /*Bit32u WinFuncPtr*/ 0,  
761 -- /*Bit16u BytesPerScanLine*/ 640*2,  
762 --// Mandatory information for VBE 1.2 and above  
763 -- /*Bit16u XResolution*/ 640,  
764 -- /*Bit16u YResolution*/ 480,  
765 -+/*Bit16u BytesPerScanLine*/ 960,  
766 -+/*Bit16u XResolution*/ 320,  
767 -+/*Bit16u YResolution*/ 200,  
768 - /*Bit8u XCharSize*/ 8,  
769 - /*Bit8u YCharSize*/ 16,  
770 - /*Bit8u NumberOfPlanes*/ 1,  
771 -- /*Bit8u BitsPerPixel*/ 16,  
772 -- /*Bit8u NumberOfBanks*/ 1,  
773 -+/*Bit8u BitsPerPixel*/ 24,  
774 -+/*Bit8u NumberOfBanks*/ 3,  
775 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
776 - /*Bit8u BankSize*/ 0,  
777 -- /*Bit8u NumberOfImagePages*/ 5,  
778 -+/*Bit8u NumberOfImagePages*/ 0,  
779 - /*Bit8u Reserved_page*/ 0,  
780 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
781 -- /*Bit8u RedMaskSize*/ 5,  
782 -- /*Bit8u RedFieldPosition*/ 11,  
783 -- /*Bit8u GreenMaskSize*/ 6,  
784 -- /*Bit8u GreenFieldPosition*/ 5,  
785 -- /*Bit8u BlueMaskSize*/ 5,  
786 -+/*Bit8u RedMaskSize*/ 8,  
787 -+/*Bit8u RedFieldPosition*/ 16,  
788 -+/*Bit8u GreenMaskSize*/ 8,  
789 -+/*Bit8u GreenFieldPosition*/ 8,  
790 -+/*Bit8u BlueMaskSize*/ 8,  
791 - /*Bit8u BlueFieldPosition*/ 0,  
792 - /*Bit8u RsvdMaskSize*/ 0,  
793 - /*Bit8u RsvdFieldPosition*/ 0,  
794 - /*Bit8u DirectColorModeInfo*/ 0,  
795 --// Mandatory information for VBE 2.0 and above  
796 --#ifdef VBE_HAVE_LFB  
797 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
798 --#else  
799 -- /*Bit32u PhysBasePtr*/ 0,  
800 --#endif  
801 - /*Bit32u OffScreenMemOffset*/ 0,  
802 - /*Bit16u OffScreenMemSize*/ 0,  
803 --// Mandatory information for VBE 3.0 and above  
804 -- /*Bit16u LinBytesPerScanLine*/ 640*2,  
805 -+/*Bit16u LinBytesPerScanLine*/ 960,  
806 - /*Bit8u BnkNumberOfPages*/ 0,  
807 - /*Bit8u LinNumberOfPages*/ 0,  
808 -- /*Bit8u LinRedMaskSize*/ 5,  
809 -- /*Bit8u LinRedFieldPosition*/ 11,  
810 -- /*Bit8u LinGreenMaskSize*/ 6,  
811 -- /*Bit8u LinGreenFieldPosition*/ 5,  
812 -- /*Bit8u LinBlueMaskSize*/ 5,  
813 -+/*Bit8u LinRedMaskSize*/ 8,  
814 -+/*Bit8u LinRedFieldPosition*/ 16,  
815 -+/*Bit8u LinGreenMaskSize*/ 8,  
816 -+/*Bit8u LinGreenFieldPosition*/ 8,  
817 -+/*Bit8u LinBlueMaskSize*/ 8,  
818 - /*Bit8u LinBlueFieldPosition*/ 0,  
819 - /*Bit8u LinRsvdMaskSize*/ 0,  
820 - /*Bit8u LinRsvdFieldPosition*/ 0,  
821 - /*Bit32u MaxPixelClock*/ 0,  
822 --/*} ModeInfoBlock;*/  
823 -- }  
824 -- },  
825 --  
826 -- {  
827 -- VBE_VESA_MODE_800X600X565,  
828 -- {  
829 --/*typedef struct ModeInfoBlock  
830 --{*/  
831 --// Mandatory information for all VBE revisions  
832 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
833 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
834 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
835 --#ifdef VBE_HAVE_LFB  
836 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
837 --#endif  
838 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
839 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
840 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
841 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
842 -+} },  
843 -+{ 0x0110, /* 640x480x15 */  
844 -+{ /*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,  
845 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
846 - /*Bit8u WinBAttributes*/ 0,  
847 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
848 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
849 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
850 -- /*Bit16u WinBSegment*/ 0,  
851 -+/*Bit16u WinBSegment*/ 0x0000,  
852 - /*Bit32u WinFuncPtr*/ 0,  
853 -- /*Bit16u BytesPerScanLine*/ 800*2,  
854 --// Mandatory information for VBE 1.2 and above  
855 -- /*Bit16u XResolution*/ 800,  
856 -- /*Bit16u YResolution*/ 600,  
857 -+/*Bit16u BytesPerScanLine*/ 1280,  
858 -+/*Bit16u XResolution*/ 640,  
859 -+/*Bit16u YResolution*/ 480,  
860 - /*Bit8u XCharSize*/ 8,  
861 - /*Bit8u YCharSize*/ 16,  
862 - /*Bit8u NumberOfPlanes*/ 1,  
863 -- /*Bit8u BitsPerPixel*/ 16,  
864 -- /*Bit8u NumberOfBanks*/ 1,  
865 -+/*Bit8u BitsPerPixel*/ 15,  
866 -+/*Bit8u NumberOfBanks*/ 10,  
867 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
868 - /*Bit8u BankSize*/ 0,  
869 -- /*Bit8u NumberOfImagePages*/ 3,  
870 -+/*Bit8u NumberOfImagePages*/ 0,  
871 - /*Bit8u Reserved_page*/ 0,  
872 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
873 - /*Bit8u RedMaskSize*/ 5,  
874 -- /*Bit8u RedFieldPosition*/ 11,  
875 -- /*Bit8u GreenMaskSize*/ 6,  
876 -+/*Bit8u RedFieldPosition*/ 10,  
877 -+/*Bit8u GreenMaskSize*/ 5,  
878 - /*Bit8u GreenFieldPosition*/ 5,  
879 - /*Bit8u BlueMaskSize*/ 5,  
880 - /*Bit8u BlueFieldPosition*/ 0,  
881 -- /*Bit8u RsvdMaskSize*/ 0,  
882 -- /*Bit8u RsvdFieldPosition*/ 0,  
883 -+/*Bit8u RsvdMaskSize*/ 1,  
884 -+/*Bit8u RsvdFieldPosition*/ 15,  
885 - /*Bit8u DirectColorModeInfo*/ 0,  
886 --// Mandatory information for VBE 2.0 and above  
887 --#ifdef VBE_HAVE_LFB  
888 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
889 --#else  
890 -- /*Bit32u PhysBasePtr*/ 0,  
891 --#endif  
892 - /*Bit32u OffScreenMemOffset*/ 0,  
893 - /*Bit16u OffScreenMemSize*/ 0,  
894 --// Mandatory information for VBE 3.0 and above  
895 -- /*Bit16u LinBytesPerScanLine*/ 800*2,  
896 -+/*Bit16u LinBytesPerScanLine*/ 1280,  
897 - /*Bit8u BnkNumberOfPages*/ 0,  
898 - /*Bit8u LinNumberOfPages*/ 0,  
899 - /*Bit8u LinRedMaskSize*/ 5,  
900 -- /*Bit8u LinRedFieldPosition*/ 11,  
901 -- /*Bit8u LinGreenMaskSize*/ 6,  
902 -+/*Bit8u LinRedFieldPosition*/ 10,  
903 -+/*Bit8u LinGreenMaskSize*/ 5,  
904 - /*Bit8u LinGreenFieldPosition*/ 5,  
905 - /*Bit8u LinBlueMaskSize*/ 5,  
906 - /*Bit8u LinBlueFieldPosition*/ 0,  
907 -- /*Bit8u LinRsvdMaskSize*/ 0,  
908 -- /*Bit8u LinRsvdFieldPosition*/ 0,  
909 -+/*Bit8u LinRsvdMaskSize*/ 1,  
910 -+/*Bit8u LinRsvdFieldPosition*/ 15,  
911 - /*Bit32u MaxPixelClock*/ 0,  
912 --/*} ModeInfoBlock;*/  
913 -- }  
914 -- },  
915 --  
916 -- {  
917 -- VBE_VESA_MODE_1024X768X565,  
918 -- {  
919 --/*typedef struct ModeInfoBlock  
920 --{*/  
921 --// Mandatory information for all VBE revisions  
922 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
923 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
924 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
925 --#ifdef VBE_HAVE_LFB  
926 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
927 --#endif  
928 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
929 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
930 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
931 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
932 -+} },  
933 -+{ 0x0111, /* 640x480x16 */  
934 -+{ /*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,  
935 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
936 - /*Bit8u WinBAttributes*/ 0,  
937 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
938 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
939 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
940 -- /*Bit16u WinBSegment*/ 0,  
941 -+/*Bit16u WinBSegment*/ 0x0000,  
942 - /*Bit32u WinFuncPtr*/ 0,  
943 -- /*Bit16u BytesPerScanLine*/ 1024*2,  
944 --// Mandatory information for VBE 1.2 and above  
945 -- /*Bit16u XResolution*/ 1024,  
946 -- /*Bit16u YResolution*/ 768,  
947 -+/*Bit16u BytesPerScanLine*/ 1280,  
948 -+/*Bit16u XResolution*/ 640,  
949 -+/*Bit16u YResolution*/ 480,  
950 - /*Bit8u XCharSize*/ 8,  
951 - /*Bit8u YCharSize*/ 16,  
952 - /*Bit8u NumberOfPlanes*/ 1,  
953 - /*Bit8u BitsPerPixel*/ 16,  
954 -- /*Bit8u NumberOfBanks*/ 1,  
955 -+/*Bit8u NumberOfBanks*/ 10,  
956 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
957 - /*Bit8u BankSize*/ 0,  
958 -- /*Bit8u NumberOfImagePages*/ 1,  
959 -+/*Bit8u NumberOfImagePages*/ 0,  
960 - /*Bit8u Reserved_page*/ 0,  
961 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
962 - /*Bit8u RedMaskSize*/ 5,  
963 - /*Bit8u RedFieldPosition*/ 11,  
964 - /*Bit8u GreenMaskSize*/ 6,  
965 -@@ -756,16 +506,10 @@  
966 - /*Bit8u RsvdMaskSize*/ 0,  
967 - /*Bit8u RsvdFieldPosition*/ 0,  
968 - /*Bit8u DirectColorModeInfo*/ 0,  
969 --// Mandatory information for VBE 2.0 and above  
970 --#ifdef VBE_HAVE_LFB  
971 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
972 --#else  
973 -- /*Bit32u PhysBasePtr*/ 0,  
974 --#endif  
975 - /*Bit32u OffScreenMemOffset*/ 0,  
976 - /*Bit16u OffScreenMemSize*/ 0,  
977 --// Mandatory information for VBE 3.0 and above  
978 -- /*Bit16u LinBytesPerScanLine*/ 1024*2,  
979 -+/*Bit16u LinBytesPerScanLine*/ 1280,  
980 - /*Bit8u BnkNumberOfPages*/ 0,  
981 - /*Bit8u LinNumberOfPages*/ 0,  
982 - /*Bit8u LinRedMaskSize*/ 5,  
983 -@@ -777,46 +521,28 @@  
984 - /*Bit8u LinRsvdMaskSize*/ 0,  
985 - /*Bit8u LinRsvdFieldPosition*/ 0,  
986 - /*Bit32u MaxPixelClock*/ 0,  
987 --/*} ModeInfoBlock;*/  
988 -- }  
989 -- },  
990 --  
991 -- {  
992 -- VBE_VESA_MODE_640X480X888,  
993 -- {  
994 --/*typedef struct ModeInfoBlock  
995 --{*/  
996 --// Mandatory information for all VBE revisions  
997 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
998 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
999 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
1000 --#ifdef VBE_HAVE_LFB  
1001 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
1002 --#endif  
1003 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
1004 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
1005 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
1006 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1007 -+} },  
1008 -+{ 0x0112, /* 640x480x24 */  
1009 -+{ /*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,  
1010 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1011 - /*Bit8u WinBAttributes*/ 0,  
1012 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1013 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1014 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1015 -- /*Bit16u WinBSegment*/ 0,  
1016 -+/*Bit16u WinBSegment*/ 0x0000,  
1017 - /*Bit32u WinFuncPtr*/ 0,  
1018 -- /*Bit16u BytesPerScanLine*/ 640*3,  
1019 --// Mandatory information for VBE 1.2 and above  
1020 -+/*Bit16u BytesPerScanLine*/ 1920,  
1021 - /*Bit16u XResolution*/ 640,  
1022 - /*Bit16u YResolution*/ 480,  
1023 - /*Bit8u XCharSize*/ 8,  
1024 - /*Bit8u YCharSize*/ 16,  
1025 - /*Bit8u NumberOfPlanes*/ 1,  
1026 - /*Bit8u BitsPerPixel*/ 24,  
1027 -- /*Bit8u NumberOfBanks*/ 1,  
1028 -+/*Bit8u NumberOfBanks*/ 15,  
1029 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1030 - /*Bit8u BankSize*/ 0,  
1031 -- /*Bit8u NumberOfImagePages*/ 3,  
1032 -+/*Bit8u NumberOfImagePages*/ 0,  
1033 - /*Bit8u Reserved_page*/ 0,  
1034 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
1035 - /*Bit8u RedMaskSize*/ 8,  
1036 - /*Bit8u RedFieldPosition*/ 16,  
1037 - /*Bit8u GreenMaskSize*/ 8,  
1038 -@@ -826,16 +552,10 @@  
1039 - /*Bit8u RsvdMaskSize*/ 0,  
1040 - /*Bit8u RsvdFieldPosition*/ 0,  
1041 - /*Bit8u DirectColorModeInfo*/ 0,  
1042 --// Mandatory information for VBE 2.0 and above  
1043 --#ifdef VBE_HAVE_LFB  
1044 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1045 --#else  
1046 -- /*Bit32u PhysBasePtr*/ 0,  
1047 --#endif  
1048 - /*Bit32u OffScreenMemOffset*/ 0,  
1049 - /*Bit16u OffScreenMemSize*/ 0,  
1050 --// Mandatory information for VBE 3.0 and above  
1051 -- /*Bit16u LinBytesPerScanLine*/ 640*3,  
1052 -+/*Bit16u LinBytesPerScanLine*/ 1920,  
1053 - /*Bit8u BnkNumberOfPages*/ 0,  
1054 - /*Bit8u LinNumberOfPages*/ 0,  
1055 - /*Bit8u LinRedMaskSize*/ 8,  
1056 -@@ -847,186 +567,764 @@  
1057 - /*Bit8u LinRsvdMaskSize*/ 0,  
1058 - /*Bit8u LinRsvdFieldPosition*/ 0,  
1059 - /*Bit32u MaxPixelClock*/ 0,  
1060 --/*} ModeInfoBlock;*/  
1061 -- }  
1062 -- },  
1063 --  
1064 -- {  
1065 -- VBE_VESA_MODE_800X600X888,  
1066 -- {  
1067 --/*typedef struct ModeInfoBlock  
1068 --{*/  
1069 --// Mandatory information for all VBE revisions  
1070 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
1071 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
1072 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
1073 --#ifdef VBE_HAVE_LFB  
1074 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
1075 --#endif  
1076 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
1077 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
1078 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
1079 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1080 -+} },  
1081 -+{ 0x0113, /* 800x600x15 */  
1082 -+{ /*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,  
1083 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1084 - /*Bit8u WinBAttributes*/ 0,  
1085 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1086 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1087 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1088 -- /*Bit16u WinBSegment*/ 0,  
1089 -+/*Bit16u WinBSegment*/ 0x0000,  
1090 - /*Bit32u WinFuncPtr*/ 0,  
1091 -- /*Bit16u BytesPerScanLine*/ 800*3,  
1092 --// Mandatory information for VBE 1.2 and above  
1093 -+/*Bit16u BytesPerScanLine*/ 1600,  
1094 - /*Bit16u XResolution*/ 800,  
1095 - /*Bit16u YResolution*/ 600,  
1096 - /*Bit8u XCharSize*/ 8,  
1097 - /*Bit8u YCharSize*/ 16,  
1098 - /*Bit8u NumberOfPlanes*/ 1,  
1099 -- /*Bit8u BitsPerPixel*/ 24,  
1100 -- /*Bit8u NumberOfBanks*/ 1,  
1101 -+/*Bit8u BitsPerPixel*/ 15,  
1102 -+/*Bit8u NumberOfBanks*/ 15,  
1103 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1104 - /*Bit8u BankSize*/ 0,  
1105 -- /*Bit8u NumberOfImagePages*/ 1,  
1106 -+/*Bit8u NumberOfImagePages*/ 0,  
1107 - /*Bit8u Reserved_page*/ 0,  
1108 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
1109 -- /*Bit8u RedMaskSize*/ 8,  
1110 -- /*Bit8u RedFieldPosition*/ 16,  
1111 -- /*Bit8u GreenMaskSize*/ 8,  
1112 -- /*Bit8u GreenFieldPosition*/ 8,  
1113 -- /*Bit8u BlueMaskSize*/ 8,  
1114 -+/*Bit8u RedMaskSize*/ 5,  
1115 -+/*Bit8u RedFieldPosition*/ 10,  
1116 -+/*Bit8u GreenMaskSize*/ 5,  
1117 -+/*Bit8u GreenFieldPosition*/ 5,  
1118 -+/*Bit8u BlueMaskSize*/ 5,  
1119 - /*Bit8u BlueFieldPosition*/ 0,  
1120 -- /*Bit8u RsvdMaskSize*/ 0,  
1121 -- /*Bit8u RsvdFieldPosition*/ 0,  
1122 -+/*Bit8u RsvdMaskSize*/ 1,  
1123 -+/*Bit8u RsvdFieldPosition*/ 15,  
1124 - /*Bit8u DirectColorModeInfo*/ 0,  
1125 --// Mandatory information for VBE 2.0 and above  
1126 --#ifdef VBE_HAVE_LFB  
1127 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1128 --#else  
1129 -- /*Bit32u PhysBasePtr*/ 0,  
1130 --#endif  
1131 - /*Bit32u OffScreenMemOffset*/ 0,  
1132 - /*Bit16u OffScreenMemSize*/ 0,  
1133 --// Mandatory information for VBE 3.0 and above  
1134 -- /*Bit16u LinBytesPerScanLine*/ 800*3,  
1135 -+/*Bit16u LinBytesPerScanLine*/ 1600,  
1136 - /*Bit8u BnkNumberOfPages*/ 0,  
1137 - /*Bit8u LinNumberOfPages*/ 0,  
1138 -- /*Bit8u LinRedMaskSize*/ 8,  
1139 -- /*Bit8u LinRedFieldPosition*/ 16,  
1140 -- /*Bit8u LinGreenMaskSize*/ 8,  
1141 -- /*Bit8u LinGreenFieldPosition*/ 8,  
1142 -- /*Bit8u LinBlueMaskSize*/ 8,  
1143 -+/*Bit8u LinRedMaskSize*/ 5,  
1144 -+/*Bit8u LinRedFieldPosition*/ 10,  
1145 -+/*Bit8u LinGreenMaskSize*/ 5,  
1146 -+/*Bit8u LinGreenFieldPosition*/ 5,  
1147 -+/*Bit8u LinBlueMaskSize*/ 5,  
1148 - /*Bit8u LinBlueFieldPosition*/ 0,  
1149 -- /*Bit8u LinRsvdMaskSize*/ 0,  
1150 -- /*Bit8u LinRsvdFieldPosition*/ 0,  
1151 -+/*Bit8u LinRsvdMaskSize*/ 1,  
1152 -+/*Bit8u LinRsvdFieldPosition*/ 15,  
1153 - /*Bit32u MaxPixelClock*/ 0,  
1154 --/*} ModeInfoBlock;*/  
1155 -- }  
1156 -- },  
1157 --  
1158 -- {  
1159 -- VBE_VESA_MODE_1024X768X888,  
1160 -- {  
1161 --/*typedef struct ModeInfoBlock  
1162 --{*/  
1163 --// Mandatory information for all VBE revisions  
1164 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
1165 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
1166 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
1167 --#ifdef VBE_HAVE_LFB  
1168 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
1169 --#endif  
1170 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
1171 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
1172 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
1173 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1174 -+} },  
1175 -+{ 0x0114, /* 800x600x16 */  
1176 -+{ /*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,  
1177 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1178 - /*Bit8u WinBAttributes*/ 0,  
1179 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1180 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1181 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1182 -- /*Bit16u WinBSegment*/ 0,  
1183 -+/*Bit16u WinBSegment*/ 0x0000,  
1184 - /*Bit32u WinFuncPtr*/ 0,  
1185 -- /*Bit16u BytesPerScanLine*/ 1024*3,  
1186 --// Mandatory information for VBE 1.2 and above  
1187 -- /*Bit16u XResolution*/ 1024,  
1188 -- /*Bit16u YResolution*/ 768,  
1189 -+/*Bit16u BytesPerScanLine*/ 1600,  
1190 -+/*Bit16u XResolution*/ 800,  
1191 -+/*Bit16u YResolution*/ 600,  
1192 - /*Bit8u XCharSize*/ 8,  
1193 - /*Bit8u YCharSize*/ 16,  
1194 - /*Bit8u NumberOfPlanes*/ 1,  
1195 -- /*Bit8u BitsPerPixel*/ 24,  
1196 -- /*Bit8u NumberOfBanks*/ 1,  
1197 -+/*Bit8u BitsPerPixel*/ 16,  
1198 -+/*Bit8u NumberOfBanks*/ 15,  
1199 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1200 - /*Bit8u BankSize*/ 0,  
1201 - /*Bit8u NumberOfImagePages*/ 0,  
1202 - /*Bit8u Reserved_page*/ 0,  
1203 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
1204 -- /*Bit8u RedMaskSize*/ 8,  
1205 -- /*Bit8u RedFieldPosition*/ 16,  
1206 -- /*Bit8u GreenMaskSize*/ 8,  
1207 -- /*Bit8u GreenFieldPosition*/ 8,  
1208 -- /*Bit8u BlueMaskSize*/ 8,  
1209 -+/*Bit8u RedMaskSize*/ 5,  
1210 -+/*Bit8u RedFieldPosition*/ 11,  
1211 -+/*Bit8u GreenMaskSize*/ 6,  
1212 -+/*Bit8u GreenFieldPosition*/ 5,  
1213 -+/*Bit8u BlueMaskSize*/ 5,  
1214 - /*Bit8u BlueFieldPosition*/ 0,  
1215 - /*Bit8u RsvdMaskSize*/ 0,  
1216 - /*Bit8u RsvdFieldPosition*/ 0,  
1217 - /*Bit8u DirectColorModeInfo*/ 0,  
1218 --// Mandatory information for VBE 2.0 and above  
1219 --#ifdef VBE_HAVE_LFB  
1220 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1221 --#else  
1222 -- /*Bit32u PhysBasePtr*/ 0,  
1223 --#endif  
1224 - /*Bit32u OffScreenMemOffset*/ 0,  
1225 - /*Bit16u OffScreenMemSize*/ 0,  
1226 --// Mandatory information for VBE 3.0 and above  
1227 -- /*Bit16u LinBytesPerScanLine*/ 1024*3,  
1228 -+/*Bit16u LinBytesPerScanLine*/ 1600,  
1229 - /*Bit8u BnkNumberOfPages*/ 0,  
1230 - /*Bit8u LinNumberOfPages*/ 0,  
1231 -- /*Bit8u LinRedMaskSize*/ 8,  
1232 -- /*Bit8u LinRedFieldPosition*/ 16,  
1233 -- /*Bit8u LinGreenMaskSize*/ 8,  
1234 -- /*Bit8u LinGreenFieldPosition*/ 8,  
1235 -+/*Bit8u LinRedMaskSize*/ 5,  
1236 -+/*Bit8u LinRedFieldPosition*/ 11,  
1237 -+/*Bit8u LinGreenMaskSize*/ 6,  
1238 -+/*Bit8u LinGreenFieldPosition*/ 5,  
1239 -+/*Bit8u LinBlueMaskSize*/ 5,  
1240 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1241 -+/*Bit8u LinRsvdMaskSize*/ 0,  
1242 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
1243 -+/*Bit32u MaxPixelClock*/ 0,  
1244 -+} },  
1245 -+{ 0x0115, /* 800x600x24 */  
1246 -+{ /*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,  
1247 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1248 -+/*Bit8u WinBAttributes*/ 0,  
1249 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1250 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1251 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1252 -+/*Bit16u WinBSegment*/ 0x0000,  
1253 -+/*Bit32u WinFuncPtr*/ 0,  
1254 -+/*Bit16u BytesPerScanLine*/ 2400,  
1255 -+/*Bit16u XResolution*/ 800,  
1256 -+/*Bit16u YResolution*/ 600,  
1257 -+/*Bit8u XCharSize*/ 8,  
1258 -+/*Bit8u YCharSize*/ 16,  
1259 -+/*Bit8u NumberOfPlanes*/ 1,  
1260 -+/*Bit8u BitsPerPixel*/ 24,  
1261 -+/*Bit8u NumberOfBanks*/ 22,  
1262 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1263 -+/*Bit8u BankSize*/ 0,  
1264 -+/*Bit8u NumberOfImagePages*/ 0,  
1265 -+/*Bit8u Reserved_page*/ 0,  
1266 -+/*Bit8u RedMaskSize*/ 8,  
1267 -+/*Bit8u RedFieldPosition*/ 16,  
1268 -+/*Bit8u GreenMaskSize*/ 8,  
1269 -+/*Bit8u GreenFieldPosition*/ 8,  
1270 -+/*Bit8u BlueMaskSize*/ 8,  
1271 -+/*Bit8u BlueFieldPosition*/ 0,  
1272 -+/*Bit8u RsvdMaskSize*/ 0,  
1273 -+/*Bit8u RsvdFieldPosition*/ 0,  
1274 -+/*Bit8u DirectColorModeInfo*/ 0,  
1275 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1276 -+/*Bit32u OffScreenMemOffset*/ 0,  
1277 -+/*Bit16u OffScreenMemSize*/ 0,  
1278 -+/*Bit16u LinBytesPerScanLine*/ 2400,  
1279 -+/*Bit8u BnkNumberOfPages*/ 0,  
1280 -+/*Bit8u LinNumberOfPages*/ 0,  
1281 -+/*Bit8u LinRedMaskSize*/ 8,  
1282 -+/*Bit8u LinRedFieldPosition*/ 16,  
1283 -+/*Bit8u LinGreenMaskSize*/ 8,  
1284 -+/*Bit8u LinGreenFieldPosition*/ 8,  
1285 -+/*Bit8u LinBlueMaskSize*/ 8,  
1286 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1287 -+/*Bit8u LinRsvdMaskSize*/ 0,  
1288 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
1289 -+/*Bit32u MaxPixelClock*/ 0,  
1290 -+} },  
1291 -+{ 0x0116, /* 1024x768x15 */  
1292 -+{ /*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,  
1293 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1294 -+/*Bit8u WinBAttributes*/ 0,  
1295 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1296 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1297 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1298 -+/*Bit16u WinBSegment*/ 0x0000,  
1299 -+/*Bit32u WinFuncPtr*/ 0,  
1300 -+/*Bit16u BytesPerScanLine*/ 2048,  
1301 -+/*Bit16u XResolution*/ 1024,  
1302 -+/*Bit16u YResolution*/ 768,  
1303 -+/*Bit8u XCharSize*/ 8,  
1304 -+/*Bit8u YCharSize*/ 16,  
1305 -+/*Bit8u NumberOfPlanes*/ 1,  
1306 -+/*Bit8u BitsPerPixel*/ 15,  
1307 -+/*Bit8u NumberOfBanks*/ 24,  
1308 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1309 -+/*Bit8u BankSize*/ 0,  
1310 -+/*Bit8u NumberOfImagePages*/ 0,  
1311 -+/*Bit8u Reserved_page*/ 0,  
1312 -+/*Bit8u RedMaskSize*/ 5,  
1313 -+/*Bit8u RedFieldPosition*/ 10,  
1314 -+/*Bit8u GreenMaskSize*/ 5,  
1315 -+/*Bit8u GreenFieldPosition*/ 5,  
1316 -+/*Bit8u BlueMaskSize*/ 5,  
1317 -+/*Bit8u BlueFieldPosition*/ 0,  
1318 -+/*Bit8u RsvdMaskSize*/ 1,  
1319 -+/*Bit8u RsvdFieldPosition*/ 15,  
1320 -+/*Bit8u DirectColorModeInfo*/ 0,  
1321 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1322 -+/*Bit32u OffScreenMemOffset*/ 0,  
1323 -+/*Bit16u OffScreenMemSize*/ 0,  
1324 -+/*Bit16u LinBytesPerScanLine*/ 2048,  
1325 -+/*Bit8u BnkNumberOfPages*/ 0,  
1326 -+/*Bit8u LinNumberOfPages*/ 0,  
1327 -+/*Bit8u LinRedMaskSize*/ 5,  
1328 -+/*Bit8u LinRedFieldPosition*/ 10,  
1329 -+/*Bit8u LinGreenMaskSize*/ 5,  
1330 -+/*Bit8u LinGreenFieldPosition*/ 5,  
1331 -+/*Bit8u LinBlueMaskSize*/ 5,  
1332 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1333 -+/*Bit8u LinRsvdMaskSize*/ 1,  
1334 -+/*Bit8u LinRsvdFieldPosition*/ 15,  
1335 -+/*Bit32u MaxPixelClock*/ 0,  
1336 -+} },  
1337 -+{ 0x0117, /* 1024x768x16 */  
1338 -+{ /*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,  
1339 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1340 -+/*Bit8u WinBAttributes*/ 0,  
1341 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1342 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1343 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1344 -+/*Bit16u WinBSegment*/ 0x0000,  
1345 -+/*Bit32u WinFuncPtr*/ 0,  
1346 -+/*Bit16u BytesPerScanLine*/ 2048,  
1347 -+/*Bit16u XResolution*/ 1024,  
1348 -+/*Bit16u YResolution*/ 768,  
1349 -+/*Bit8u XCharSize*/ 8,  
1350 -+/*Bit8u YCharSize*/ 16,  
1351 -+/*Bit8u NumberOfPlanes*/ 1,  
1352 -+/*Bit8u BitsPerPixel*/ 16,  
1353 -+/*Bit8u NumberOfBanks*/ 24,  
1354 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1355 -+/*Bit8u BankSize*/ 0,  
1356 -+/*Bit8u NumberOfImagePages*/ 0,  
1357 -+/*Bit8u Reserved_page*/ 0,  
1358 -+/*Bit8u RedMaskSize*/ 5,  
1359 -+/*Bit8u RedFieldPosition*/ 11,  
1360 -+/*Bit8u GreenMaskSize*/ 6,  
1361 -+/*Bit8u GreenFieldPosition*/ 5,  
1362 -+/*Bit8u BlueMaskSize*/ 5,  
1363 -+/*Bit8u BlueFieldPosition*/ 0,  
1364 -+/*Bit8u RsvdMaskSize*/ 0,  
1365 -+/*Bit8u RsvdFieldPosition*/ 0,  
1366 -+/*Bit8u DirectColorModeInfo*/ 0,  
1367 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1368 -+/*Bit32u OffScreenMemOffset*/ 0,  
1369 -+/*Bit16u OffScreenMemSize*/ 0,  
1370 -+/*Bit16u LinBytesPerScanLine*/ 2048,  
1371 -+/*Bit8u BnkNumberOfPages*/ 0,  
1372 -+/*Bit8u LinNumberOfPages*/ 0,  
1373 -+/*Bit8u LinRedMaskSize*/ 5,  
1374 -+/*Bit8u LinRedFieldPosition*/ 11,  
1375 -+/*Bit8u LinGreenMaskSize*/ 6,  
1376 -+/*Bit8u LinGreenFieldPosition*/ 5,  
1377 -+/*Bit8u LinBlueMaskSize*/ 5,  
1378 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1379 -+/*Bit8u LinRsvdMaskSize*/ 0,  
1380 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
1381 -+/*Bit32u MaxPixelClock*/ 0,  
1382 -+} },  
1383 -+{ 0x0118, /* 1024x768x24 */  
1384 -+{ /*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,  
1385 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1386 -+/*Bit8u WinBAttributes*/ 0,  
1387 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1388 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1389 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1390 -+/*Bit16u WinBSegment*/ 0x0000,  
1391 -+/*Bit32u WinFuncPtr*/ 0,  
1392 -+/*Bit16u BytesPerScanLine*/ 3072,  
1393 -+/*Bit16u XResolution*/ 1024,  
1394 -+/*Bit16u YResolution*/ 768,  
1395 -+/*Bit8u XCharSize*/ 8,  
1396 -+/*Bit8u YCharSize*/ 16,  
1397 -+/*Bit8u NumberOfPlanes*/ 1,  
1398 -+/*Bit8u BitsPerPixel*/ 24,  
1399 -+/*Bit8u NumberOfBanks*/ 36,  
1400 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1401 -+/*Bit8u BankSize*/ 0,  
1402 -+/*Bit8u NumberOfImagePages*/ 0,  
1403 -+/*Bit8u Reserved_page*/ 0,  
1404 -+/*Bit8u RedMaskSize*/ 8,  
1405 -+/*Bit8u RedFieldPosition*/ 16,  
1406 -+/*Bit8u GreenMaskSize*/ 8,  
1407 -+/*Bit8u GreenFieldPosition*/ 8,  
1408 -+/*Bit8u BlueMaskSize*/ 8,  
1409 -+/*Bit8u BlueFieldPosition*/ 0,  
1410 -+/*Bit8u RsvdMaskSize*/ 0,  
1411 -+/*Bit8u RsvdFieldPosition*/ 0,  
1412 -+/*Bit8u DirectColorModeInfo*/ 0,  
1413 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1414 -+/*Bit32u OffScreenMemOffset*/ 0,  
1415 -+/*Bit16u OffScreenMemSize*/ 0,  
1416 -+/*Bit16u LinBytesPerScanLine*/ 3072,  
1417 -+/*Bit8u BnkNumberOfPages*/ 0,  
1418 -+/*Bit8u LinNumberOfPages*/ 0,  
1419 -+/*Bit8u LinRedMaskSize*/ 8,  
1420 -+/*Bit8u LinRedFieldPosition*/ 16,  
1421 -+/*Bit8u LinGreenMaskSize*/ 8,  
1422 -+/*Bit8u LinGreenFieldPosition*/ 8,  
1423 -+/*Bit8u LinBlueMaskSize*/ 8,  
1424 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1425 -+/*Bit8u LinRsvdMaskSize*/ 0,  
1426 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
1427 -+/*Bit32u MaxPixelClock*/ 0,  
1428 -+} },  
1429 -+{ 0x0119, /* 1280x1024x15 */  
1430 -+{ /*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,  
1431 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1432 -+/*Bit8u WinBAttributes*/ 0,  
1433 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1434 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1435 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1436 -+/*Bit16u WinBSegment*/ 0x0000,  
1437 -+/*Bit32u WinFuncPtr*/ 0,  
1438 -+/*Bit16u BytesPerScanLine*/ 2560,  
1439 -+/*Bit16u XResolution*/ 1280,  
1440 -+/*Bit16u YResolution*/ 1024,  
1441 -+/*Bit8u XCharSize*/ 8,  
1442 -+/*Bit8u YCharSize*/ 16,  
1443 -+/*Bit8u NumberOfPlanes*/ 1,  
1444 -+/*Bit8u BitsPerPixel*/ 15,  
1445 -+/*Bit8u NumberOfBanks*/ 40,  
1446 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1447 -+/*Bit8u BankSize*/ 0,  
1448 -+/*Bit8u NumberOfImagePages*/ 0,  
1449 -+/*Bit8u Reserved_page*/ 0,  
1450 -+/*Bit8u RedMaskSize*/ 5,  
1451 -+/*Bit8u RedFieldPosition*/ 10,  
1452 -+/*Bit8u GreenMaskSize*/ 5,  
1453 -+/*Bit8u GreenFieldPosition*/ 5,  
1454 -+/*Bit8u BlueMaskSize*/ 5,  
1455 -+/*Bit8u BlueFieldPosition*/ 0,  
1456 -+/*Bit8u RsvdMaskSize*/ 1,  
1457 -+/*Bit8u RsvdFieldPosition*/ 15,  
1458 -+/*Bit8u DirectColorModeInfo*/ 0,  
1459 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1460 -+/*Bit32u OffScreenMemOffset*/ 0,  
1461 -+/*Bit16u OffScreenMemSize*/ 0,  
1462 -+/*Bit16u LinBytesPerScanLine*/ 2560,  
1463 -+/*Bit8u BnkNumberOfPages*/ 0,  
1464 -+/*Bit8u LinNumberOfPages*/ 0,  
1465 -+/*Bit8u LinRedMaskSize*/ 5,  
1466 -+/*Bit8u LinRedFieldPosition*/ 10,  
1467 -+/*Bit8u LinGreenMaskSize*/ 5,  
1468 -+/*Bit8u LinGreenFieldPosition*/ 5,  
1469 -+/*Bit8u LinBlueMaskSize*/ 5,  
1470 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1471 -+/*Bit8u LinRsvdMaskSize*/ 1,  
1472 -+/*Bit8u LinRsvdFieldPosition*/ 15,  
1473 -+/*Bit32u MaxPixelClock*/ 0,  
1474 -+} },  
1475 -+{ 0x011a, /* 1280x1024x16 */  
1476 -+{ /*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,  
1477 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1478 -+/*Bit8u WinBAttributes*/ 0,  
1479 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1480 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1481 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1482 -+/*Bit16u WinBSegment*/ 0x0000,  
1483 -+/*Bit32u WinFuncPtr*/ 0,  
1484 -+/*Bit16u BytesPerScanLine*/ 2560,  
1485 -+/*Bit16u XResolution*/ 1280,  
1486 -+/*Bit16u YResolution*/ 1024,  
1487 -+/*Bit8u XCharSize*/ 8,  
1488 -+/*Bit8u YCharSize*/ 16,  
1489 -+/*Bit8u NumberOfPlanes*/ 1,  
1490 -+/*Bit8u BitsPerPixel*/ 16,  
1491 -+/*Bit8u NumberOfBanks*/ 40,  
1492 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1493 -+/*Bit8u BankSize*/ 0,  
1494 -+/*Bit8u NumberOfImagePages*/ 0,  
1495 -+/*Bit8u Reserved_page*/ 0,  
1496 -+/*Bit8u RedMaskSize*/ 5,  
1497 -+/*Bit8u RedFieldPosition*/ 11,  
1498 -+/*Bit8u GreenMaskSize*/ 6,  
1499 -+/*Bit8u GreenFieldPosition*/ 5,  
1500 -+/*Bit8u BlueMaskSize*/ 5,  
1501 -+/*Bit8u BlueFieldPosition*/ 0,  
1502 -+/*Bit8u RsvdMaskSize*/ 0,  
1503 -+/*Bit8u RsvdFieldPosition*/ 0,  
1504 -+/*Bit8u DirectColorModeInfo*/ 0,  
1505 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1506 -+/*Bit32u OffScreenMemOffset*/ 0,  
1507 -+/*Bit16u OffScreenMemSize*/ 0,  
1508 -+/*Bit16u LinBytesPerScanLine*/ 2560,  
1509 -+/*Bit8u BnkNumberOfPages*/ 0,  
1510 -+/*Bit8u LinNumberOfPages*/ 0,  
1511 -+/*Bit8u LinRedMaskSize*/ 5,  
1512 -+/*Bit8u LinRedFieldPosition*/ 11,  
1513 -+/*Bit8u LinGreenMaskSize*/ 6,  
1514 -+/*Bit8u LinGreenFieldPosition*/ 5,  
1515 -+/*Bit8u LinBlueMaskSize*/ 5,  
1516 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1517 -+/*Bit8u LinRsvdMaskSize*/ 0,  
1518 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
1519 -+/*Bit32u MaxPixelClock*/ 0,  
1520 -+} },  
1521 -+{ 0x011b, /* 1280x1024x24 */  
1522 -+{ /*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,  
1523 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1524 -+/*Bit8u WinBAttributes*/ 0,  
1525 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1526 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1527 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1528 -+/*Bit16u WinBSegment*/ 0x0000,  
1529 -+/*Bit32u WinFuncPtr*/ 0,  
1530 -+/*Bit16u BytesPerScanLine*/ 3840,  
1531 -+/*Bit16u XResolution*/ 1280,  
1532 -+/*Bit16u YResolution*/ 1024,  
1533 -+/*Bit8u XCharSize*/ 8,  
1534 -+/*Bit8u YCharSize*/ 16,  
1535 -+/*Bit8u NumberOfPlanes*/ 1,  
1536 -+/*Bit8u BitsPerPixel*/ 24,  
1537 -+/*Bit8u NumberOfBanks*/ 60,  
1538 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1539 -+/*Bit8u BankSize*/ 0,  
1540 -+/*Bit8u NumberOfImagePages*/ 0,  
1541 -+/*Bit8u Reserved_page*/ 0,  
1542 -+/*Bit8u RedMaskSize*/ 8,  
1543 -+/*Bit8u RedFieldPosition*/ 16,  
1544 -+/*Bit8u GreenMaskSize*/ 8,  
1545 -+/*Bit8u GreenFieldPosition*/ 8,  
1546 -+/*Bit8u BlueMaskSize*/ 8,  
1547 -+/*Bit8u BlueFieldPosition*/ 0,  
1548 -+/*Bit8u RsvdMaskSize*/ 0,  
1549 -+/*Bit8u RsvdFieldPosition*/ 0,  
1550 -+/*Bit8u DirectColorModeInfo*/ 0,  
1551 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1552 -+/*Bit32u OffScreenMemOffset*/ 0,  
1553 -+/*Bit16u OffScreenMemSize*/ 0,  
1554 -+/*Bit16u LinBytesPerScanLine*/ 3840,  
1555 -+/*Bit8u BnkNumberOfPages*/ 0,  
1556 -+/*Bit8u LinNumberOfPages*/ 0,  
1557 -+/*Bit8u LinRedMaskSize*/ 8,  
1558 -+/*Bit8u LinRedFieldPosition*/ 16,  
1559 -+/*Bit8u LinGreenMaskSize*/ 8,  
1560 -+/*Bit8u LinGreenFieldPosition*/ 8,  
1561 -+/*Bit8u LinBlueMaskSize*/ 8,  
1562 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1563 -+/*Bit8u LinRsvdMaskSize*/ 0,  
1564 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
1565 -+/*Bit32u MaxPixelClock*/ 0,  
1566 -+} },  
1567 -+{ 0x011c, /* 1600x1200x8 */  
1568 -+{ /*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,  
1569 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1570 -+/*Bit8u WinBAttributes*/ 0,  
1571 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1572 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1573 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1574 -+/*Bit16u WinBSegment*/ 0x0000,  
1575 -+/*Bit32u WinFuncPtr*/ 0,  
1576 -+/*Bit16u BytesPerScanLine*/ 1600,  
1577 -+/*Bit16u XResolution*/ 1600,  
1578 -+/*Bit16u YResolution*/ 1200,  
1579 -+/*Bit8u XCharSize*/ 8,  
1580 -+/*Bit8u YCharSize*/ 16,  
1581 -+/*Bit8u NumberOfPlanes*/ 1,  
1582 -+/*Bit8u BitsPerPixel*/ 8,  
1583 -+/*Bit8u NumberOfBanks*/ 30,  
1584 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,  
1585 -+/*Bit8u BankSize*/ 0,  
1586 -+/*Bit8u NumberOfImagePages*/ 0,  
1587 -+/*Bit8u Reserved_page*/ 0,  
1588 -+/*Bit8u RedMaskSize*/ 0,  
1589 -+/*Bit8u RedFieldPosition*/ 0,  
1590 -+/*Bit8u GreenMaskSize*/ 0,  
1591 -+/*Bit8u GreenFieldPosition*/ 0,  
1592 -+/*Bit8u BlueMaskSize*/ 0,  
1593 -+/*Bit8u BlueFieldPosition*/ 0,  
1594 -+/*Bit8u RsvdMaskSize*/ 0,  
1595 -+/*Bit8u RsvdFieldPosition*/ 0,  
1596 -+/*Bit8u DirectColorModeInfo*/ 0,  
1597 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1598 -+/*Bit32u OffScreenMemOffset*/ 0,  
1599 -+/*Bit16u OffScreenMemSize*/ 0,  
1600 -+/*Bit16u LinBytesPerScanLine*/ 1600,  
1601 -+/*Bit8u BnkNumberOfPages*/ 0,  
1602 -+/*Bit8u LinNumberOfPages*/ 0,  
1603 -+/*Bit8u LinRedMaskSize*/ 0,  
1604 -+/*Bit8u LinRedFieldPosition*/ 0,  
1605 -+/*Bit8u LinGreenMaskSize*/ 0,  
1606 -+/*Bit8u LinGreenFieldPosition*/ 0,  
1607 -+/*Bit8u LinBlueMaskSize*/ 0,  
1608 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1609 -+/*Bit8u LinRsvdMaskSize*/ 0,  
1610 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
1611 -+/*Bit32u MaxPixelClock*/ 0,  
1612 -+} },  
1613 -+{ 0x011d, /* 1600x1200x15 */  
1614 -+{ /*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,  
1615 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1616 -+/*Bit8u WinBAttributes*/ 0,  
1617 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1618 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1619 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1620 -+/*Bit16u WinBSegment*/ 0x0000,  
1621 -+/*Bit32u WinFuncPtr*/ 0,  
1622 -+/*Bit16u BytesPerScanLine*/ 3200,  
1623 -+/*Bit16u XResolution*/ 1600,  
1624 -+/*Bit16u YResolution*/ 1200,  
1625 -+/*Bit8u XCharSize*/ 8,  
1626 -+/*Bit8u YCharSize*/ 16,  
1627 -+/*Bit8u NumberOfPlanes*/ 1,  
1628 -+/*Bit8u BitsPerPixel*/ 15,  
1629 -+/*Bit8u NumberOfBanks*/ 59,  
1630 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1631 -+/*Bit8u BankSize*/ 0,  
1632 -+/*Bit8u NumberOfImagePages*/ 0,  
1633 -+/*Bit8u Reserved_page*/ 0,  
1634 -+/*Bit8u RedMaskSize*/ 5,  
1635 -+/*Bit8u RedFieldPosition*/ 10,  
1636 -+/*Bit8u GreenMaskSize*/ 5,  
1637 -+/*Bit8u GreenFieldPosition*/ 5,  
1638 -+/*Bit8u BlueMaskSize*/ 5,  
1639 -+/*Bit8u BlueFieldPosition*/ 0,  
1640 -+/*Bit8u RsvdMaskSize*/ 1,  
1641 -+/*Bit8u RsvdFieldPosition*/ 15,  
1642 -+/*Bit8u DirectColorModeInfo*/ 0,  
1643 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1644 -+/*Bit32u OffScreenMemOffset*/ 0,  
1645 -+/*Bit16u OffScreenMemSize*/ 0,  
1646 -+/*Bit16u LinBytesPerScanLine*/ 3200,  
1647 -+/*Bit8u BnkNumberOfPages*/ 0,  
1648 -+/*Bit8u LinNumberOfPages*/ 0,  
1649 -+/*Bit8u LinRedMaskSize*/ 5,  
1650 -+/*Bit8u LinRedFieldPosition*/ 10,  
1651 -+/*Bit8u LinGreenMaskSize*/ 5,  
1652 -+/*Bit8u LinGreenFieldPosition*/ 5,  
1653 -+/*Bit8u LinBlueMaskSize*/ 5,  
1654 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1655 -+/*Bit8u LinRsvdMaskSize*/ 1,  
1656 -+/*Bit8u LinRsvdFieldPosition*/ 15,  
1657 -+/*Bit32u MaxPixelClock*/ 0,  
1658 -+} },  
1659 -+{ 0x011e, /* 1600x1200x16 */  
1660 -+{ /*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,  
1661 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1662 -+/*Bit8u WinBAttributes*/ 0,  
1663 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1664 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1665 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1666 -+/*Bit16u WinBSegment*/ 0x0000,  
1667 -+/*Bit32u WinFuncPtr*/ 0,  
1668 -+/*Bit16u BytesPerScanLine*/ 3200,  
1669 -+/*Bit16u XResolution*/ 1600,  
1670 -+/*Bit16u YResolution*/ 1200,  
1671 -+/*Bit8u XCharSize*/ 8,  
1672 -+/*Bit8u YCharSize*/ 16,  
1673 -+/*Bit8u NumberOfPlanes*/ 1,  
1674 -+/*Bit8u BitsPerPixel*/ 16,  
1675 -+/*Bit8u NumberOfBanks*/ 59,  
1676 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1677 -+/*Bit8u BankSize*/ 0,  
1678 -+/*Bit8u NumberOfImagePages*/ 0,  
1679 -+/*Bit8u Reserved_page*/ 0,  
1680 -+/*Bit8u RedMaskSize*/ 5,  
1681 -+/*Bit8u RedFieldPosition*/ 11,  
1682 -+/*Bit8u GreenMaskSize*/ 6,  
1683 -+/*Bit8u GreenFieldPosition*/ 5,  
1684 -+/*Bit8u BlueMaskSize*/ 5,  
1685 -+/*Bit8u BlueFieldPosition*/ 0,  
1686 -+/*Bit8u RsvdMaskSize*/ 0,  
1687 -+/*Bit8u RsvdFieldPosition*/ 0,  
1688 -+/*Bit8u DirectColorModeInfo*/ 0,  
1689 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1690 -+/*Bit32u OffScreenMemOffset*/ 0,  
1691 -+/*Bit16u OffScreenMemSize*/ 0,  
1692 -+/*Bit16u LinBytesPerScanLine*/ 3200,  
1693 -+/*Bit8u BnkNumberOfPages*/ 0,  
1694 -+/*Bit8u LinNumberOfPages*/ 0,  
1695 -+/*Bit8u LinRedMaskSize*/ 5,  
1696 -+/*Bit8u LinRedFieldPosition*/ 11,  
1697 -+/*Bit8u LinGreenMaskSize*/ 6,  
1698 -+/*Bit8u LinGreenFieldPosition*/ 5,  
1699 -+/*Bit8u LinBlueMaskSize*/ 5,  
1700 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1701 -+/*Bit8u LinRsvdMaskSize*/ 0,  
1702 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
1703 -+/*Bit32u MaxPixelClock*/ 0,  
1704 -+} },  
1705 -+{ 0x011f, /* 1600x1200x24 */  
1706 -+{ /*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,  
1707 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1708 -+/*Bit8u WinBAttributes*/ 0,  
1709 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1710 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1711 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1712 -+/*Bit16u WinBSegment*/ 0x0000,  
1713 -+/*Bit32u WinFuncPtr*/ 0,  
1714 -+/*Bit16u BytesPerScanLine*/ 4800,  
1715 -+/*Bit16u XResolution*/ 1600,  
1716 -+/*Bit16u YResolution*/ 1200,  
1717 -+/*Bit8u XCharSize*/ 8,  
1718 -+/*Bit8u YCharSize*/ 16,  
1719 -+/*Bit8u NumberOfPlanes*/ 1,  
1720 -+/*Bit8u BitsPerPixel*/ 24,  
1721 -+/*Bit8u NumberOfBanks*/ 88,  
1722 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1723 -+/*Bit8u BankSize*/ 0,  
1724 -+/*Bit8u NumberOfImagePages*/ 0,  
1725 -+/*Bit8u Reserved_page*/ 0,  
1726 -+/*Bit8u RedMaskSize*/ 8,  
1727 -+/*Bit8u RedFieldPosition*/ 16,  
1728 -+/*Bit8u GreenMaskSize*/ 8,  
1729 -+/*Bit8u GreenFieldPosition*/ 8,  
1730 -+/*Bit8u BlueMaskSize*/ 8,  
1731 -+/*Bit8u BlueFieldPosition*/ 0,  
1732 -+/*Bit8u RsvdMaskSize*/ 0,  
1733 -+/*Bit8u RsvdFieldPosition*/ 0,  
1734 -+/*Bit8u DirectColorModeInfo*/ 0,  
1735 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1736 -+/*Bit32u OffScreenMemOffset*/ 0,  
1737 -+/*Bit16u OffScreenMemSize*/ 0,  
1738 -+/*Bit16u LinBytesPerScanLine*/ 4800,  
1739 -+/*Bit8u BnkNumberOfPages*/ 0,  
1740 -+/*Bit8u LinNumberOfPages*/ 0,  
1741 -+/*Bit8u LinRedMaskSize*/ 8,  
1742 -+/*Bit8u LinRedFieldPosition*/ 16,  
1743 -+/*Bit8u LinGreenMaskSize*/ 8,  
1744 -+/*Bit8u LinGreenFieldPosition*/ 8,  
1745 - /*Bit8u LinBlueMaskSize*/ 8,  
1746 - /*Bit8u LinBlueFieldPosition*/ 0,  
1747 - /*Bit8u LinRsvdMaskSize*/ 0,  
1748 - /*Bit8u LinRsvdFieldPosition*/ 0,  
1749 - /*Bit32u MaxPixelClock*/ 0,  
1750 --/*} ModeInfoBlock;*/  
1751 -- }  
1752 -- },  
1753 --  
1754 -- {  
1755 -- VBE_OWN_MODE_640X480X8888,  
1756 -- {  
1757 --/*typedef struct ModeInfoBlock  
1758 --{*/  
1759 --// Mandatory information for all VBE revisions  
1760 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
1761 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
1762 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
1763 --#ifdef VBE_HAVE_LFB  
1764 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
1765 --#endif  
1766 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
1767 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
1768 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
1769 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1770 -+} },  
1771 -+{ 0x0140, /* 320x200x32 */  
1772 -+{ /*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,  
1773 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1774 -+/*Bit8u WinBAttributes*/ 0,  
1775 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1776 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1777 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1778 -+/*Bit16u WinBSegment*/ 0x0000,  
1779 -+/*Bit32u WinFuncPtr*/ 0,  
1780 -+/*Bit16u BytesPerScanLine*/ 1280,  
1781 -+/*Bit16u XResolution*/ 320,  
1782 -+/*Bit16u YResolution*/ 200,  
1783 -+/*Bit8u XCharSize*/ 8,  
1784 -+/*Bit8u YCharSize*/ 16,  
1785 -+/*Bit8u NumberOfPlanes*/ 1,  
1786 -+/*Bit8u BitsPerPixel*/ 32,  
1787 -+/*Bit8u NumberOfBanks*/ 4,  
1788 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1789 -+/*Bit8u BankSize*/ 0,  
1790 -+/*Bit8u NumberOfImagePages*/ 0,  
1791 -+/*Bit8u Reserved_page*/ 0,  
1792 -+/*Bit8u RedMaskSize*/ 8,  
1793 -+/*Bit8u RedFieldPosition*/ 16,  
1794 -+/*Bit8u GreenMaskSize*/ 8,  
1795 -+/*Bit8u GreenFieldPosition*/ 8,  
1796 -+/*Bit8u BlueMaskSize*/ 8,  
1797 -+/*Bit8u BlueFieldPosition*/ 0,  
1798 -+/*Bit8u RsvdMaskSize*/ 8,  
1799 -+/*Bit8u RsvdFieldPosition*/ 24,  
1800 -+/*Bit8u DirectColorModeInfo*/ 0,  
1801 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1802 -+/*Bit32u OffScreenMemOffset*/ 0,  
1803 -+/*Bit16u OffScreenMemSize*/ 0,  
1804 -+/*Bit16u LinBytesPerScanLine*/ 1280,  
1805 -+/*Bit8u BnkNumberOfPages*/ 0,  
1806 -+/*Bit8u LinNumberOfPages*/ 0,  
1807 -+/*Bit8u LinRedMaskSize*/ 8,  
1808 -+/*Bit8u LinRedFieldPosition*/ 16,  
1809 -+/*Bit8u LinGreenMaskSize*/ 8,  
1810 -+/*Bit8u LinGreenFieldPosition*/ 8,  
1811 -+/*Bit8u LinBlueMaskSize*/ 8,  
1812 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1813 -+/*Bit8u LinRsvdMaskSize*/ 8,  
1814 -+/*Bit8u LinRsvdFieldPosition*/ 24,  
1815 -+/*Bit32u MaxPixelClock*/ 0,  
1816 -+} },  
1817 -+{ 0x0141, /* 640x400x32 */  
1818 -+{ /*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,  
1819 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1820 -+/*Bit8u WinBAttributes*/ 0,  
1821 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1822 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1823 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1824 -+/*Bit16u WinBSegment*/ 0x0000,  
1825 -+/*Bit32u WinFuncPtr*/ 0,  
1826 -+/*Bit16u BytesPerScanLine*/ 2560,  
1827 -+/*Bit16u XResolution*/ 640,  
1828 -+/*Bit16u YResolution*/ 400,  
1829 -+/*Bit8u XCharSize*/ 8,  
1830 -+/*Bit8u YCharSize*/ 16,  
1831 -+/*Bit8u NumberOfPlanes*/ 1,  
1832 -+/*Bit8u BitsPerPixel*/ 32,  
1833 -+/*Bit8u NumberOfBanks*/ 16,  
1834 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1835 -+/*Bit8u BankSize*/ 0,  
1836 -+/*Bit8u NumberOfImagePages*/ 0,  
1837 -+/*Bit8u Reserved_page*/ 0,  
1838 -+/*Bit8u RedMaskSize*/ 8,  
1839 -+/*Bit8u RedFieldPosition*/ 16,  
1840 -+/*Bit8u GreenMaskSize*/ 8,  
1841 -+/*Bit8u GreenFieldPosition*/ 8,  
1842 -+/*Bit8u BlueMaskSize*/ 8,  
1843 -+/*Bit8u BlueFieldPosition*/ 0,  
1844 -+/*Bit8u RsvdMaskSize*/ 8,  
1845 -+/*Bit8u RsvdFieldPosition*/ 24,  
1846 -+/*Bit8u DirectColorModeInfo*/ 0,  
1847 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1848 -+/*Bit32u OffScreenMemOffset*/ 0,  
1849 -+/*Bit16u OffScreenMemSize*/ 0,  
1850 -+/*Bit16u LinBytesPerScanLine*/ 2560,  
1851 -+/*Bit8u BnkNumberOfPages*/ 0,  
1852 -+/*Bit8u LinNumberOfPages*/ 0,  
1853 -+/*Bit8u LinRedMaskSize*/ 8,  
1854 -+/*Bit8u LinRedFieldPosition*/ 16,  
1855 -+/*Bit8u LinGreenMaskSize*/ 8,  
1856 -+/*Bit8u LinGreenFieldPosition*/ 8,  
1857 -+/*Bit8u LinBlueMaskSize*/ 8,  
1858 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1859 -+/*Bit8u LinRsvdMaskSize*/ 8,  
1860 -+/*Bit8u LinRsvdFieldPosition*/ 24,  
1861 -+/*Bit32u MaxPixelClock*/ 0,  
1862 -+} },  
1863 -+{ 0x0142, /* 640x480x32 */  
1864 -+{ /*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,  
1865 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1866 -+/*Bit8u WinBAttributes*/ 0,  
1867 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1868 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1869 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1870 -+/*Bit16u WinBSegment*/ 0x0000,  
1871 -+/*Bit32u WinFuncPtr*/ 0,  
1872 -+/*Bit16u BytesPerScanLine*/ 2560,  
1873 -+/*Bit16u XResolution*/ 640,  
1874 -+/*Bit16u YResolution*/ 480,  
1875 -+/*Bit8u XCharSize*/ 8,  
1876 -+/*Bit8u YCharSize*/ 16,  
1877 -+/*Bit8u NumberOfPlanes*/ 1,  
1878 -+/*Bit8u BitsPerPixel*/ 32,  
1879 -+/*Bit8u NumberOfBanks*/ 19,  
1880 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1881 -+/*Bit8u BankSize*/ 0,  
1882 -+/*Bit8u NumberOfImagePages*/ 0,  
1883 -+/*Bit8u Reserved_page*/ 0,  
1884 -+/*Bit8u RedMaskSize*/ 8,  
1885 -+/*Bit8u RedFieldPosition*/ 16,  
1886 -+/*Bit8u GreenMaskSize*/ 8,  
1887 -+/*Bit8u GreenFieldPosition*/ 8,  
1888 -+/*Bit8u BlueMaskSize*/ 8,  
1889 -+/*Bit8u BlueFieldPosition*/ 0,  
1890 -+/*Bit8u RsvdMaskSize*/ 8,  
1891 -+/*Bit8u RsvdFieldPosition*/ 24,  
1892 -+/*Bit8u DirectColorModeInfo*/ 0,  
1893 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1894 -+/*Bit32u OffScreenMemOffset*/ 0,  
1895 -+/*Bit16u OffScreenMemSize*/ 0,  
1896 -+/*Bit16u LinBytesPerScanLine*/ 2560,  
1897 -+/*Bit8u BnkNumberOfPages*/ 0,  
1898 -+/*Bit8u LinNumberOfPages*/ 0,  
1899 -+/*Bit8u LinRedMaskSize*/ 8,  
1900 -+/*Bit8u LinRedFieldPosition*/ 16,  
1901 -+/*Bit8u LinGreenMaskSize*/ 8,  
1902 -+/*Bit8u LinGreenFieldPosition*/ 8,  
1903 -+/*Bit8u LinBlueMaskSize*/ 8,  
1904 -+/*Bit8u LinBlueFieldPosition*/ 0,  
1905 -+/*Bit8u LinRsvdMaskSize*/ 8,  
1906 -+/*Bit8u LinRsvdFieldPosition*/ 24,  
1907 -+/*Bit32u MaxPixelClock*/ 0,  
1908 -+} },  
1909 -+{ 0x0143, /* 800x600x32 */  
1910 -+{ /*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,  
1911 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1912 - /*Bit8u WinBAttributes*/ 0,  
1913 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1914 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1915 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1916 -- /*Bit16u WinBSegment*/ 0,  
1917 -+/*Bit16u WinBSegment*/ 0x0000,  
1918 - /*Bit32u WinFuncPtr*/ 0,  
1919 -- /*Bit16u BytesPerScanLine*/ 640*4,  
1920 --// Mandatory information for VBE 1.2 and above  
1921 -- /*Bit16u XResolution*/ 640,  
1922 -- /*Bit16u YResolution*/ 480,  
1923 -+/*Bit16u BytesPerScanLine*/ 3200,  
1924 -+/*Bit16u XResolution*/ 800,  
1925 -+/*Bit16u YResolution*/ 600,  
1926 - /*Bit8u XCharSize*/ 8,  
1927 - /*Bit8u YCharSize*/ 16,  
1928 - /*Bit8u NumberOfPlanes*/ 1,  
1929 - /*Bit8u BitsPerPixel*/ 32,  
1930 -- /*Bit8u NumberOfBanks*/ 1,  
1931 -+/*Bit8u NumberOfBanks*/ 30,  
1932 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
1933 - /*Bit8u BankSize*/ 0,  
1934 -- /*Bit8u NumberOfImagePages*/ 1,  
1935 -+/*Bit8u NumberOfImagePages*/ 0,  
1936 - /*Bit8u Reserved_page*/ 0,  
1937 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
1938 - /*Bit8u RedMaskSize*/ 8,  
1939 - /*Bit8u RedFieldPosition*/ 16,  
1940 - /*Bit8u GreenMaskSize*/ 8,  
1941 -@@ -1035,17 +1333,11 @@  
1942 - /*Bit8u BlueFieldPosition*/ 0,  
1943 - /*Bit8u RsvdMaskSize*/ 8,  
1944 - /*Bit8u RsvdFieldPosition*/ 24,  
1945 -- /*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,  
1946 --// Mandatory information for VBE 2.0 and above  
1947 --#ifdef VBE_HAVE_LFB  
1948 -+/*Bit8u DirectColorModeInfo*/ 0,  
1949 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
1950 --#else  
1951 -- /*Bit32u PhysBasePtr*/ 0,  
1952 --#endif  
1953 - /*Bit32u OffScreenMemOffset*/ 0,  
1954 - /*Bit16u OffScreenMemSize*/ 0,  
1955 --// Mandatory information for VBE 3.0 and above  
1956 -- /*Bit16u LinBytesPerScanLine*/ 640*4,  
1957 -+/*Bit16u LinBytesPerScanLine*/ 3200,  
1958 - /*Bit8u BnkNumberOfPages*/ 0,  
1959 - /*Bit8u LinNumberOfPages*/ 0,  
1960 - /*Bit8u LinRedMaskSize*/ 8,  
1961 -@@ -1057,46 +1349,28 @@  
1962 - /*Bit8u LinRsvdMaskSize*/ 8,  
1963 - /*Bit8u LinRsvdFieldPosition*/ 24,  
1964 - /*Bit32u MaxPixelClock*/ 0,  
1965 --/*} ModeInfoBlock;*/  
1966 -- }  
1967 -- },  
1968 --  
1969 -- {  
1970 -- VBE_OWN_MODE_800X600X8888,  
1971 -- {  
1972 --/*typedef struct ModeInfoBlock  
1973 --{*/  
1974 --// Mandatory information for all VBE revisions  
1975 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
1976 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
1977 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
1978 --#ifdef VBE_HAVE_LFB  
1979 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
1980 --#endif  
1981 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
1982 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
1983 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
1984 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1985 -+} },  
1986 -+{ 0x0144, /* 1024x768x32 */  
1987 -+{ /*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,  
1988 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
1989 - /*Bit8u WinBAttributes*/ 0,  
1990 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
1991 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
1992 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
1993 -- /*Bit16u WinBSegment*/ 0,  
1994 -+/*Bit16u WinBSegment*/ 0x0000,  
1995 - /*Bit32u WinFuncPtr*/ 0,  
1996 -- /*Bit16u BytesPerScanLine*/ 800*4,  
1997 --// Mandatory information for VBE 1.2 and above  
1998 -- /*Bit16u XResolution*/ 800,  
1999 -- /*Bit16u YResolution*/ 600,  
2000 -+/*Bit16u BytesPerScanLine*/ 4096,  
2001 -+/*Bit16u XResolution*/ 1024,  
2002 -+/*Bit16u YResolution*/ 768,  
2003 - /*Bit8u XCharSize*/ 8,  
2004 - /*Bit8u YCharSize*/ 16,  
2005 - /*Bit8u NumberOfPlanes*/ 1,  
2006 - /*Bit8u BitsPerPixel*/ 32,  
2007 -- /*Bit8u NumberOfBanks*/ 1,  
2008 -+/*Bit8u NumberOfBanks*/ 48,  
2009 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
2010 - /*Bit8u BankSize*/ 0,  
2011 -- /*Bit8u NumberOfImagePages*/ 1,  
2012 -+/*Bit8u NumberOfImagePages*/ 0,  
2013 - /*Bit8u Reserved_page*/ 0,  
2014 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
2015 - /*Bit8u RedMaskSize*/ 8,  
2016 - /*Bit8u RedFieldPosition*/ 16,  
2017 - /*Bit8u GreenMaskSize*/ 8,  
2018 -@@ -1105,17 +1379,11 @@  
2019 - /*Bit8u BlueFieldPosition*/ 0,  
2020 - /*Bit8u RsvdMaskSize*/ 8,  
2021 - /*Bit8u RsvdFieldPosition*/ 24,  
2022 -- /*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,  
2023 --// Mandatory information for VBE 2.0 and above  
2024 --#ifdef VBE_HAVE_LFB  
2025 -+/*Bit8u DirectColorModeInfo*/ 0,  
2026 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
2027 --#else  
2028 -- /*Bit32u PhysBasePtr*/ 0,  
2029 --#endif  
2030 - /*Bit32u OffScreenMemOffset*/ 0,  
2031 - /*Bit16u OffScreenMemSize*/ 0,  
2032 --// Mandatory information for VBE 3.0 and above  
2033 -- /*Bit16u LinBytesPerScanLine*/ 800*4,  
2034 -+/*Bit16u LinBytesPerScanLine*/ 4096,  
2035 - /*Bit8u BnkNumberOfPages*/ 0,  
2036 - /*Bit8u LinNumberOfPages*/ 0,  
2037 - /*Bit8u LinRedMaskSize*/ 8,  
2038 -@@ -1127,46 +1395,28 @@  
2039 - /*Bit8u LinRsvdMaskSize*/ 8,  
2040 - /*Bit8u LinRsvdFieldPosition*/ 24,  
2041 - /*Bit32u MaxPixelClock*/ 0,  
2042 --/*} ModeInfoBlock;*/  
2043 -- }  
2044 -- },  
2045 --  
2046 -- {  
2047 -- VBE_OWN_MODE_1024X768X8888,  
2048 -- {  
2049 --/*typedef struct ModeInfoBlock  
2050 --{*/  
2051 --// Mandatory information for all VBE revisions  
2052 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
2053 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
2054 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
2055 --#ifdef VBE_HAVE_LFB  
2056 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |  
2057 --#endif  
2058 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
2059 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |  
2060 -- VBE_WINDOW_ATTRIBUTE_READABLE |  
2061 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2062 -+} },  
2063 -+{ 0x0145, /* 1280x1024x32 */  
2064 -+{ /*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,  
2065 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2066 - /*Bit8u WinBAttributes*/ 0,  
2067 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
2068 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
2069 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
2070 -- /*Bit16u WinBSegment*/ 0,  
2071 -+/*Bit16u WinBSegment*/ 0x0000,  
2072 - /*Bit32u WinFuncPtr*/ 0,  
2073 -- /*Bit16u BytesPerScanLine*/ 1024*4,  
2074 --// Mandatory information for VBE 1.2 and above  
2075 -- /*Bit16u XResolution*/ 1024,  
2076 -- /*Bit16u YResolution*/ 768,  
2077 -+/*Bit16u BytesPerScanLine*/ 5120,  
2078 -+/*Bit16u XResolution*/ 1280,  
2079 -+/*Bit16u YResolution*/ 1024,  
2080 - /*Bit8u XCharSize*/ 8,  
2081 - /*Bit8u YCharSize*/ 16,  
2082 - /*Bit8u NumberOfPlanes*/ 1,  
2083 - /*Bit8u BitsPerPixel*/ 32,  
2084 -- /*Bit8u NumberOfBanks*/ 1,  
2085 -+/*Bit8u NumberOfBanks*/ 80,  
2086 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
2087 - /*Bit8u BankSize*/ 0,  
2088 -- /*Bit8u NumberOfImagePages*/ 1,  
2089 -+/*Bit8u NumberOfImagePages*/ 0,  
2090 - /*Bit8u Reserved_page*/ 0,  
2091 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
2092 - /*Bit8u RedMaskSize*/ 8,  
2093 - /*Bit8u RedFieldPosition*/ 16,  
2094 - /*Bit8u GreenMaskSize*/ 8,  
2095 -@@ -1175,17 +1425,11 @@  
2096 - /*Bit8u BlueFieldPosition*/ 0,  
2097 - /*Bit8u RsvdMaskSize*/ 8,  
2098 - /*Bit8u RsvdFieldPosition*/ 24,  
2099 -- /*Bit8u DirectColorModeInfo*/ VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE,  
2100 --// Mandatory information for VBE 2.0 and above  
2101 --#ifdef VBE_HAVE_LFB  
2102 -+/*Bit8u DirectColorModeInfo*/ 0,  
2103 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
2104 --#else  
2105 -- /*Bit32u PhysBasePtr*/ 0,  
2106 --#endif  
2107 - /*Bit32u OffScreenMemOffset*/ 0,  
2108 - /*Bit16u OffScreenMemSize*/ 0,  
2109 --// Mandatory information for VBE 3.0 and above  
2110 -- /*Bit16u LinBytesPerScanLine*/ 1024*4,  
2111 -+/*Bit16u LinBytesPerScanLine*/ 5120,  
2112 - /*Bit8u BnkNumberOfPages*/ 0,  
2113 - /*Bit8u LinNumberOfPages*/ 0,  
2114 - /*Bit8u LinRedMaskSize*/ 8,  
2115 -@@ -1197,33 +1441,17 @@  
2116 - /*Bit8u LinRsvdMaskSize*/ 8,  
2117 - /*Bit8u LinRsvdFieldPosition*/ 24,  
2118 - /*Bit32u MaxPixelClock*/ 0,  
2119 --/*} ModeInfoBlock;*/  
2120 -- }  
2121 -- },  
2122 --  
2123 -- {  
2124 -- VBE_OWN_MODE_320X200X8,  
2125 -- {  
2126 --/*typedef struct ModeInfoBlock  
2127 --{*/  
2128 --// Mandatory information for all VBE revisions  
2129 -- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |  
2130 -- VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |  
2131 -- VBE_MODE_ATTRIBUTE_COLOR_MODE |  
2132 --#ifdef VBE_HAVE_LFB  
2133 -- VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | 457 +-#ifdef DEBUG
  458 +- unimplemented();
  459 +-#endif
  460 ++ Bit16u size;
  461 ++ size = 0;
  462 ++ if (CX & 1) {
  463 ++ size += 0x46;
  464 ++ }
  465 ++ if (CX & 2) {
  466 ++ size += (5 + 8 + 5) * 2 + 6;
  467 ++ }
  468 ++ if (CX & 4) {
  469 ++ size += 3 + 256 * 3 + 1;
  470 + }
  471 +-static void biosfn_save_video_state (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
  472 ++ return size;
  473 ++}
  474 ++
  475 ++static void biosfn_read_video_state_size (CX, BX)
  476 ++ Bit16u CX; Bit16u *BX;
  477 + {
  478 +-#ifdef DEBUG
  479 +- unimplemented();
2134 -#endif 480 -#endif
2135 -- VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,  
2136 -- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE |  
2137 -- VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2138 -+} },  
2139 -+{ 0x0146, /* 320x200x8 */  
2140 -+{ /*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,  
2141 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2142 - /*Bit8u WinBAttributes*/ 0,  
2143 - /*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
2144 - /*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
2145 - /*Bit16u WinASegment*/ VGAMEM_GRAPH,  
2146 -- /*Bit16u WinBSegment*/ 0,  
2147 -+/*Bit16u WinBSegment*/ 0x0000,  
2148 - /*Bit32u WinFuncPtr*/ 0,  
2149 - /*Bit16u BytesPerScanLine*/ 320,  
2150 --// Mandatory information for VBE 1.2 and above  
2151 - /*Bit16u XResolution*/ 320,  
2152 - /*Bit16u YResolution*/ 200,  
2153 - /*Bit8u XCharSize*/ 8,  
2154 -@@ -1233,9 +1461,8 @@  
2155 - /*Bit8u NumberOfBanks*/ 1,  
2156 - /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,  
2157 - /*Bit8u BankSize*/ 0,  
2158 -- /*Bit8u NumberOfImagePages*/ 3,  
2159 -+/*Bit8u NumberOfImagePages*/ 0,  
2160 - /*Bit8u Reserved_page*/ 0,  
2161 --// Direct Color fields (required for direct/6 and YUV/7 memory models)  
2162 - /*Bit8u RedMaskSize*/ 0,  
2163 - /*Bit8u RedFieldPosition*/ 0,  
2164 - /*Bit8u GreenMaskSize*/ 0,  
2165 -@@ -1245,15 +1472,9 @@  
2166 - /*Bit8u RsvdMaskSize*/ 0,  
2167 - /*Bit8u RsvdFieldPosition*/ 0,  
2168 - /*Bit8u DirectColorModeInfo*/ 0,  
2169 --// Mandatory information for VBE 2.0 and above  
2170 --#ifdef VBE_HAVE_LFB  
2171 - /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
2172 --#else  
2173 -- /*Bit32u PhysBasePtr*/ 0, 481 ++ Bit16u ss=get_SS();
  482 ++ write_word(ss, BX, biosfn_read_video_state_size2(CX));
  483 + }
  484 +-static void biosfn_restore_video_state (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
  485 ++
  486 ++static Bit16u biosfn_save_video_state (CX,ES,BX)
  487 ++ Bit16u CX;Bit16u ES;Bit16u BX;
  488 + {
  489 +-#ifdef DEBUG
  490 +- unimplemented();
2174 -#endif 491 -#endif
2175 - /*Bit32u OffScreenMemOffset*/ 0,  
2176 - /*Bit16u OffScreenMemSize*/ 0,  
2177 --// Mandatory information for VBE 3.0 and above  
2178 - /*Bit16u LinBytesPerScanLine*/ 320,  
2179 - /*Bit8u BnkNumberOfPages*/ 0,  
2180 - /*Bit8u LinNumberOfPages*/ 0,  
2181 -@@ -1266,17 +1487,286 @@  
2182 - /*Bit8u LinRsvdMaskSize*/ 0,  
2183 - /*Bit8u LinRsvdFieldPosition*/ 0,  
2184 - /*Bit32u MaxPixelClock*/ 0,  
2185 --/*} ModeInfoBlock;*/  
2186 -- }  
2187 -- },  
2188 --  
2189 --/** END OF THE LIST **/  
2190 -- {  
2191 -- VBE_VESA_MODE_END_OF_LIST,  
2192 -- {  
2193 -- 0,  
2194 -- }  
2195 -- }  
2196 -+} },  
2197 -+{ 0x0147, /* 1600x1200x32 */  
2198 -+{ /*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,  
2199 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2200 -+/*Bit8u WinBAttributes*/ 0,  
2201 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
2202 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
2203 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
2204 -+/*Bit16u WinBSegment*/ 0x0000,  
2205 -+/*Bit32u WinFuncPtr*/ 0,  
2206 -+/*Bit16u BytesPerScanLine*/ 6400,  
2207 -+/*Bit16u XResolution*/ 1600,  
2208 -+/*Bit16u YResolution*/ 1200,  
2209 -+/*Bit8u XCharSize*/ 8,  
2210 -+/*Bit8u YCharSize*/ 16,  
2211 -+/*Bit8u NumberOfPlanes*/ 1,  
2212 -+/*Bit8u BitsPerPixel*/ 32,  
2213 -+/*Bit8u NumberOfBanks*/ 118,  
2214 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
2215 -+/*Bit8u BankSize*/ 0,  
2216 -+/*Bit8u NumberOfImagePages*/ 0,  
2217 -+/*Bit8u Reserved_page*/ 0,  
2218 -+/*Bit8u RedMaskSize*/ 8,  
2219 -+/*Bit8u RedFieldPosition*/ 16,  
2220 -+/*Bit8u GreenMaskSize*/ 8,  
2221 -+/*Bit8u GreenFieldPosition*/ 8,  
2222 -+/*Bit8u BlueMaskSize*/ 8,  
2223 -+/*Bit8u BlueFieldPosition*/ 0,  
2224 -+/*Bit8u RsvdMaskSize*/ 8,  
2225 -+/*Bit8u RsvdFieldPosition*/ 24,  
2226 -+/*Bit8u DirectColorModeInfo*/ 0,  
2227 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
2228 -+/*Bit32u OffScreenMemOffset*/ 0,  
2229 -+/*Bit16u OffScreenMemSize*/ 0,  
2230 -+/*Bit16u LinBytesPerScanLine*/ 6400,  
2231 -+/*Bit8u BnkNumberOfPages*/ 0,  
2232 -+/*Bit8u LinNumberOfPages*/ 0,  
2233 -+/*Bit8u LinRedMaskSize*/ 8,  
2234 -+/*Bit8u LinRedFieldPosition*/ 16,  
2235 -+/*Bit8u LinGreenMaskSize*/ 8,  
2236 -+/*Bit8u LinGreenFieldPosition*/ 8,  
2237 -+/*Bit8u LinBlueMaskSize*/ 8,  
2238 -+/*Bit8u LinBlueFieldPosition*/ 0,  
2239 -+/*Bit8u LinRsvdMaskSize*/ 8,  
2240 -+/*Bit8u LinRsvdFieldPosition*/ 24,  
2241 -+/*Bit32u MaxPixelClock*/ 0,  
2242 -+} },  
2243 -+{ 0x0148, /* 1152x864x8 */  
2244 -+{ /*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,  
2245 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2246 -+/*Bit8u WinBAttributes*/ 0,  
2247 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
2248 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
2249 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
2250 -+/*Bit16u WinBSegment*/ 0x0000,  
2251 -+/*Bit32u WinFuncPtr*/ 0,  
2252 -+/*Bit16u BytesPerScanLine*/ 1152,  
2253 -+/*Bit16u XResolution*/ 1152,  
2254 -+/*Bit16u YResolution*/ 864,  
2255 -+/*Bit8u XCharSize*/ 8,  
2256 -+/*Bit8u YCharSize*/ 16,  
2257 -+/*Bit8u NumberOfPlanes*/ 1,  
2258 -+/*Bit8u BitsPerPixel*/ 8,  
2259 -+/*Bit8u NumberOfBanks*/ 16,  
2260 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL,  
2261 -+/*Bit8u BankSize*/ 0,  
2262 -+/*Bit8u NumberOfImagePages*/ 0,  
2263 -+/*Bit8u Reserved_page*/ 0,  
2264 -+/*Bit8u RedMaskSize*/ 0,  
2265 -+/*Bit8u RedFieldPosition*/ 0,  
2266 -+/*Bit8u GreenMaskSize*/ 0,  
2267 -+/*Bit8u GreenFieldPosition*/ 0,  
2268 -+/*Bit8u BlueMaskSize*/ 0,  
2269 -+/*Bit8u BlueFieldPosition*/ 0,  
2270 -+/*Bit8u RsvdMaskSize*/ 0,  
2271 -+/*Bit8u RsvdFieldPosition*/ 0,  
2272 -+/*Bit8u DirectColorModeInfo*/ 0,  
2273 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
2274 -+/*Bit32u OffScreenMemOffset*/ 0,  
2275 -+/*Bit16u OffScreenMemSize*/ 0,  
2276 -+/*Bit16u LinBytesPerScanLine*/ 1152,  
2277 -+/*Bit8u BnkNumberOfPages*/ 0,  
2278 -+/*Bit8u LinNumberOfPages*/ 0,  
2279 -+/*Bit8u LinRedMaskSize*/ 0,  
2280 -+/*Bit8u LinRedFieldPosition*/ 0,  
2281 -+/*Bit8u LinGreenMaskSize*/ 0,  
2282 -+/*Bit8u LinGreenFieldPosition*/ 0,  
2283 -+/*Bit8u LinBlueMaskSize*/ 0,  
2284 -+/*Bit8u LinBlueFieldPosition*/ 0,  
2285 -+/*Bit8u LinRsvdMaskSize*/ 0,  
2286 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
2287 -+/*Bit32u MaxPixelClock*/ 0,  
2288 -+} },  
2289 -+{ 0x0149, /* 1152x864x15 */  
2290 -+{ /*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,  
2291 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2292 -+/*Bit8u WinBAttributes*/ 0,  
2293 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
2294 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
2295 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
2296 -+/*Bit16u WinBSegment*/ 0x0000,  
2297 -+/*Bit32u WinFuncPtr*/ 0,  
2298 -+/*Bit16u BytesPerScanLine*/ 2304,  
2299 -+/*Bit16u XResolution*/ 1152,  
2300 -+/*Bit16u YResolution*/ 864,  
2301 -+/*Bit8u XCharSize*/ 8,  
2302 -+/*Bit8u YCharSize*/ 16,  
2303 -+/*Bit8u NumberOfPlanes*/ 1,  
2304 -+/*Bit8u BitsPerPixel*/ 15,  
2305 -+/*Bit8u NumberOfBanks*/ 31,  
2306 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
2307 -+/*Bit8u BankSize*/ 0,  
2308 -+/*Bit8u NumberOfImagePages*/ 0,  
2309 -+/*Bit8u Reserved_page*/ 0,  
2310 -+/*Bit8u RedMaskSize*/ 5,  
2311 -+/*Bit8u RedFieldPosition*/ 10,  
2312 -+/*Bit8u GreenMaskSize*/ 5,  
2313 -+/*Bit8u GreenFieldPosition*/ 5,  
2314 -+/*Bit8u BlueMaskSize*/ 5,  
2315 -+/*Bit8u BlueFieldPosition*/ 0,  
2316 -+/*Bit8u RsvdMaskSize*/ 1,  
2317 -+/*Bit8u RsvdFieldPosition*/ 15,  
2318 -+/*Bit8u DirectColorModeInfo*/ 0,  
2319 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
2320 -+/*Bit32u OffScreenMemOffset*/ 0,  
2321 -+/*Bit16u OffScreenMemSize*/ 0,  
2322 -+/*Bit16u LinBytesPerScanLine*/ 2304,  
2323 -+/*Bit8u BnkNumberOfPages*/ 0,  
2324 -+/*Bit8u LinNumberOfPages*/ 0,  
2325 -+/*Bit8u LinRedMaskSize*/ 5,  
2326 -+/*Bit8u LinRedFieldPosition*/ 10,  
2327 -+/*Bit8u LinGreenMaskSize*/ 5,  
2328 -+/*Bit8u LinGreenFieldPosition*/ 5,  
2329 -+/*Bit8u LinBlueMaskSize*/ 5,  
2330 -+/*Bit8u LinBlueFieldPosition*/ 0,  
2331 -+/*Bit8u LinRsvdMaskSize*/ 1,  
2332 -+/*Bit8u LinRsvdFieldPosition*/ 15,  
2333 -+/*Bit32u MaxPixelClock*/ 0,  
2334 -+} },  
2335 -+{ 0x014a, /* 1152x864x16 */  
2336 -+{ /*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,  
2337 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2338 -+/*Bit8u WinBAttributes*/ 0,  
2339 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
2340 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
2341 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
2342 -+/*Bit16u WinBSegment*/ 0x0000,  
2343 -+/*Bit32u WinFuncPtr*/ 0,  
2344 -+/*Bit16u BytesPerScanLine*/ 2304,  
2345 -+/*Bit16u XResolution*/ 1152,  
2346 -+/*Bit16u YResolution*/ 864,  
2347 -+/*Bit8u XCharSize*/ 8,  
2348 -+/*Bit8u YCharSize*/ 16,  
2349 -+/*Bit8u NumberOfPlanes*/ 1,  
2350 -+/*Bit8u BitsPerPixel*/ 16,  
2351 -+/*Bit8u NumberOfBanks*/ 31,  
2352 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
2353 -+/*Bit8u BankSize*/ 0,  
2354 -+/*Bit8u NumberOfImagePages*/ 0,  
2355 -+/*Bit8u Reserved_page*/ 0,  
2356 -+/*Bit8u RedMaskSize*/ 5,  
2357 -+/*Bit8u RedFieldPosition*/ 11,  
2358 -+/*Bit8u GreenMaskSize*/ 6,  
2359 -+/*Bit8u GreenFieldPosition*/ 5,  
2360 -+/*Bit8u BlueMaskSize*/ 5,  
2361 -+/*Bit8u BlueFieldPosition*/ 0,  
2362 -+/*Bit8u RsvdMaskSize*/ 0,  
2363 -+/*Bit8u RsvdFieldPosition*/ 0,  
2364 -+/*Bit8u DirectColorModeInfo*/ 0,  
2365 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
2366 -+/*Bit32u OffScreenMemOffset*/ 0,  
2367 -+/*Bit16u OffScreenMemSize*/ 0,  
2368 -+/*Bit16u LinBytesPerScanLine*/ 2304,  
2369 -+/*Bit8u BnkNumberOfPages*/ 0,  
2370 -+/*Bit8u LinNumberOfPages*/ 0,  
2371 -+/*Bit8u LinRedMaskSize*/ 5,  
2372 -+/*Bit8u LinRedFieldPosition*/ 11,  
2373 -+/*Bit8u LinGreenMaskSize*/ 6,  
2374 -+/*Bit8u LinGreenFieldPosition*/ 5,  
2375 -+/*Bit8u LinBlueMaskSize*/ 5,  
2376 -+/*Bit8u LinBlueFieldPosition*/ 0,  
2377 -+/*Bit8u LinRsvdMaskSize*/ 0,  
2378 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
2379 -+/*Bit32u MaxPixelClock*/ 0,  
2380 -+} },  
2381 -+{ 0x014b, /* 1152x864x24 */  
2382 -+{ /*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,  
2383 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2384 -+/*Bit8u WinBAttributes*/ 0,  
2385 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
2386 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
2387 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
2388 -+/*Bit16u WinBSegment*/ 0x0000,  
2389 -+/*Bit32u WinFuncPtr*/ 0,  
2390 -+/*Bit16u BytesPerScanLine*/ 3456,  
2391 -+/*Bit16u XResolution*/ 1152,  
2392 -+/*Bit16u YResolution*/ 864,  
2393 -+/*Bit8u XCharSize*/ 8,  
2394 -+/*Bit8u YCharSize*/ 16,  
2395 -+/*Bit8u NumberOfPlanes*/ 1,  
2396 -+/*Bit8u BitsPerPixel*/ 24,  
2397 -+/*Bit8u NumberOfBanks*/ 46,  
2398 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
2399 -+/*Bit8u BankSize*/ 0,  
2400 -+/*Bit8u NumberOfImagePages*/ 0,  
2401 -+/*Bit8u Reserved_page*/ 0,  
2402 -+/*Bit8u RedMaskSize*/ 8,  
2403 -+/*Bit8u RedFieldPosition*/ 16,  
2404 -+/*Bit8u GreenMaskSize*/ 8,  
2405 -+/*Bit8u GreenFieldPosition*/ 8,  
2406 -+/*Bit8u BlueMaskSize*/ 8,  
2407 -+/*Bit8u BlueFieldPosition*/ 0,  
2408 -+/*Bit8u RsvdMaskSize*/ 0,  
2409 -+/*Bit8u RsvdFieldPosition*/ 0,  
2410 -+/*Bit8u DirectColorModeInfo*/ 0,  
2411 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
2412 -+/*Bit32u OffScreenMemOffset*/ 0,  
2413 -+/*Bit16u OffScreenMemSize*/ 0,  
2414 -+/*Bit16u LinBytesPerScanLine*/ 3456,  
2415 -+/*Bit8u BnkNumberOfPages*/ 0,  
2416 -+/*Bit8u LinNumberOfPages*/ 0,  
2417 -+/*Bit8u LinRedMaskSize*/ 8,  
2418 -+/*Bit8u LinRedFieldPosition*/ 16,  
2419 -+/*Bit8u LinGreenMaskSize*/ 8,  
2420 -+/*Bit8u LinGreenFieldPosition*/ 8,  
2421 -+/*Bit8u LinBlueMaskSize*/ 8,  
2422 -+/*Bit8u LinBlueFieldPosition*/ 0,  
2423 -+/*Bit8u LinRsvdMaskSize*/ 0,  
2424 -+/*Bit8u LinRsvdFieldPosition*/ 0,  
2425 -+/*Bit32u MaxPixelClock*/ 0,  
2426 -+} },  
2427 -+{ 0x014c, /* 1152x864x32 */  
2428 -+{ /*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,  
2429 -+/*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE,  
2430 -+/*Bit8u WinBAttributes*/ 0,  
2431 -+/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,  
2432 -+/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,  
2433 -+/*Bit16u WinASegment*/ VGAMEM_GRAPH,  
2434 -+/*Bit16u WinBSegment*/ 0x0000,  
2435 -+/*Bit32u WinFuncPtr*/ 0,  
2436 -+/*Bit16u BytesPerScanLine*/ 4608,  
2437 -+/*Bit16u XResolution*/ 1152,  
2438 -+/*Bit16u YResolution*/ 864,  
2439 -+/*Bit8u XCharSize*/ 8,  
2440 -+/*Bit8u YCharSize*/ 16,  
2441 -+/*Bit8u NumberOfPlanes*/ 1,  
2442 -+/*Bit8u BitsPerPixel*/ 32,  
2443 -+/*Bit8u NumberOfBanks*/ 61,  
2444 -+/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,  
2445 -+/*Bit8u BankSize*/ 0,  
2446 -+/*Bit8u NumberOfImagePages*/ 0,  
2447 -+/*Bit8u Reserved_page*/ 0,  
2448 -+/*Bit8u RedMaskSize*/ 8,  
2449 -+/*Bit8u RedFieldPosition*/ 16,  
2450 -+/*Bit8u GreenMaskSize*/ 8,  
2451 -+/*Bit8u GreenFieldPosition*/ 8,  
2452 -+/*Bit8u BlueMaskSize*/ 8,  
2453 -+/*Bit8u BlueFieldPosition*/ 0,  
2454 -+/*Bit8u RsvdMaskSize*/ 8,  
2455 -+/*Bit8u RsvdFieldPosition*/ 24,  
2456 -+/*Bit8u DirectColorModeInfo*/ 0,  
2457 -+/*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,  
2458 -+/*Bit32u OffScreenMemOffset*/ 0,  
2459 -+/*Bit16u OffScreenMemSize*/ 0,  
2460 -+/*Bit16u LinBytesPerScanLine*/ 4608,  
2461 -+/*Bit8u BnkNumberOfPages*/ 0,  
2462 -+/*Bit8u LinNumberOfPages*/ 0,  
2463 -+/*Bit8u LinRedMaskSize*/ 8,  
2464 -+/*Bit8u LinRedFieldPosition*/ 16,  
2465 -+/*Bit8u LinGreenMaskSize*/ 8,  
2466 -+/*Bit8u LinGreenFieldPosition*/ 8,  
2467 -+/*Bit8u LinBlueMaskSize*/ 8,  
2468 -+/*Bit8u LinBlueFieldPosition*/ 0,  
2469 -+/*Bit8u LinRsvdMaskSize*/ 8,  
2470 -+/*Bit8u LinRsvdFieldPosition*/ 24,  
2471 -+/*Bit32u MaxPixelClock*/ 0,  
2472 -+} },  
2473 -+{ VBE_VESA_MODE_END_OF_LIST,  
2474 -+{ 0,  
2475 -+} },  
2476 - }; 492 ++ Bit16u i, v, crtc_addr, ar_index;
  493 ++
  494 ++ crtc_addr = read_word(BIOSMEM_SEG, BIOSMEM_CRTC_ADDRESS);
  495 ++ if (CX & 1) {
  496 ++ write_byte(ES, BX, inb(VGAREG_SEQU_ADDRESS)); BX++;
  497 ++ write_byte(ES, BX, inb(crtc_addr)); BX++;
  498 ++ write_byte(ES, BX, inb(VGAREG_GRDC_ADDRESS)); BX++;
  499 ++ inb(VGAREG_ACTL_RESET);
  500 ++ ar_index = inb(VGAREG_ACTL_ADDRESS);
  501 ++ write_byte(ES, BX, ar_index); BX++;
  502 ++ write_byte(ES, BX, inb(VGAREG_READ_FEATURE_CTL)); BX++;
  503 ++
  504 ++ for(i=1;i<=4;i++){
  505 ++ outb(VGAREG_SEQU_ADDRESS, i);
  506 ++ write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
  507 ++ }
  508 ++ outb(VGAREG_SEQU_ADDRESS, 0);
  509 ++ write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
  510 ++
  511 ++ for(i=0;i<=0x18;i++) {
  512 ++ outb(crtc_addr,i);
  513 ++ write_byte(ES, BX, inb(crtc_addr+1)); BX++;
  514 ++ }
  515 ++
  516 ++ for(i=0;i<=0x13;i++) {
  517 ++ inb(VGAREG_ACTL_RESET);
  518 ++ outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
  519 ++ write_byte(ES, BX, inb(VGAREG_ACTL_READ_DATA)); BX++;
  520 ++ }
  521 ++ inb(VGAREG_ACTL_RESET);
  522 ++
  523 ++ for(i=0;i<=8;i++) {
  524 ++ outb(VGAREG_GRDC_ADDRESS,i);
  525 ++ write_byte(ES, BX, inb(VGAREG_GRDC_DATA)); BX++;
  526 ++ }
  527 ++
  528 ++ write_word(ES, BX, crtc_addr); BX+= 2;
  529 ++
  530 ++ /* XXX: read plane latches */
  531 ++ write_byte(ES, BX, 0); BX++;
  532 ++ write_byte(ES, BX, 0); BX++;
  533 ++ write_byte(ES, BX, 0); BX++;
  534 ++ write_byte(ES, BX, 0); BX++;
  535 ++ }
  536 ++ if (CX & 2) {
  537 ++ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE)); BX++;
  538 ++ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS)); BX += 2;
  539 ++ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE)); BX += 2;
  540 ++ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS)); BX += 2;
  541 ++ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)); BX++;
  542 ++ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT)); BX += 2;
  543 ++ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL)); BX++;
  544 ++ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES)); BX++;
  545 ++ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL)); BX++;
  546 ++ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE)); BX += 2;
  547 ++ for(i=0;i<8;i++) {
  548 ++ write_word(ES, BX, read_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i));
  549 ++ BX += 2;
  550 ++ }
  551 ++ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START)); BX += 2;
  552 ++ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE)); BX++;
  553 ++ /* current font */
  554 ++ write_word(ES, BX, read_word(0, 0x1f * 4)); BX += 2;
  555 ++ write_word(ES, BX, read_word(0, 0x1f * 4 + 2)); BX += 2;
  556 ++ write_word(ES, BX, read_word(0, 0x43 * 4)); BX += 2;
  557 ++ write_word(ES, BX, read_word(0, 0x43 * 4 + 2)); BX += 2;
  558 ++ }
  559 ++ if (CX & 4) {
  560 ++ /* XXX: check this */
  561 ++ write_byte(ES, BX, inb(VGAREG_DAC_STATE)); BX++; /* read/write mode dac */
  562 ++ write_byte(ES, BX, inb(VGAREG_DAC_WRITE_ADDRESS)); BX++; /* pix address */
  563 ++ write_byte(ES, BX, inb(VGAREG_PEL_MASK)); BX++;
  564 ++ // Set the whole dac always, from 0
  565 ++ outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
  566 ++ for(i=0;i<256*3;i++) {
  567 ++ write_byte(ES, BX, inb(VGAREG_DAC_DATA)); BX++;
  568 ++ }
  569 ++ write_byte(ES, BX, 0); BX++; /* color select register */
  570 ++ }
  571 ++ return BX;
  572 ++}
  573 ++
  574 ++static Bit16u biosfn_restore_video_state (CX,ES,BX)
  575 ++ Bit16u CX;Bit16u ES;Bit16u BX;
  576 ++{
  577 ++ Bit16u i, crtc_addr, v, addr1, ar_index;
  578 ++
  579 ++ if (CX & 1) {
  580 ++ // Reset Attribute Ctl flip-flop
  581 ++ inb(VGAREG_ACTL_RESET);
  582 ++
  583 ++ crtc_addr = read_word(ES, BX + 0x40);
  584 ++ addr1 = BX;
  585 ++ BX += 5;
  586 ++
  587 ++ for(i=1;i<=4;i++){
  588 ++ outb(VGAREG_SEQU_ADDRESS, i);
  589 ++ outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
  590 ++ }
  591 ++ outb(VGAREG_SEQU_ADDRESS, 0);
  592 ++ outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
  593 ++
  594 ++ // Disable CRTC write protection
  595 ++ outw(crtc_addr,0x0011);
  596 ++ // Set CRTC regs
  597 ++ for(i=0;i<=0x18;i++) {
  598 ++ if (i != 0x11) {
  599 ++ outb(crtc_addr,i);
  600 ++ outb(crtc_addr+1, read_byte(ES, BX));
  601 ++ }
  602 ++ BX++;
  603 ++ }
  604 ++ // select crtc base address
  605 ++ v = inb(VGAREG_READ_MISC_OUTPUT) & ~0x01;
  606 ++ if (crtc_addr = 0x3d4)
  607 ++ v |= 0x01;
  608 ++ outb(VGAREG_WRITE_MISC_OUTPUT, v);
  609 ++
  610 ++ // enable write protection if needed
  611 ++ outb(crtc_addr, 0x11);
  612 ++ outb(crtc_addr+1, read_byte(ES, BX - 0x18 + 0x11));
  613 ++
  614 ++ // Set Attribute Ctl
  615 ++ ar_index = read_byte(ES, addr1 + 0x03);
  616 ++ inb(VGAREG_ACTL_RESET);
  617 ++ for(i=0;i<=0x13;i++) {
  618 ++ outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
  619 ++ outb(VGAREG_ACTL_WRITE_DATA, read_byte(ES, BX)); BX++;
  620 ++ }
  621 ++ outb(VGAREG_ACTL_ADDRESS, ar_index);
  622 ++ inb(VGAREG_ACTL_RESET);
  623 ++
  624 ++ for(i=0;i<=8;i++) {
  625 ++ outb(VGAREG_GRDC_ADDRESS,i);
  626 ++ outb(VGAREG_GRDC_DATA, read_byte(ES, BX)); BX++;
  627 ++ }
  628 ++ BX += 2; /* crtc_addr */
  629 ++ BX += 4; /* plane latches */
  630 ++
  631 ++ outb(VGAREG_SEQU_ADDRESS, read_byte(ES, addr1)); addr1++;
  632 ++ outb(crtc_addr, read_byte(ES, addr1)); addr1++;
  633 ++ outb(VGAREG_GRDC_ADDRESS, read_byte(ES, addr1)); addr1++;
  634 ++ addr1++;
  635 ++ outb(crtc_addr - 0x4 + 0xa, read_byte(ES, addr1)); addr1++;
  636 ++ }
  637 ++ if (CX & 2) {
  638 ++ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE, read_byte(ES, BX)); BX++;
  639 ++ write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS, read_word(ES, BX)); BX += 2;
  640 ++ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE, read_word(ES, BX)); BX += 2;
  641 ++ write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS, read_word(ES, BX)); BX += 2;
  642 ++ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS, read_byte(ES, BX)); BX++;
  643 ++ write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT, read_word(ES, BX)); BX += 2;
  644 ++ write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL, read_byte(ES, BX)); BX++;
  645 ++ write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES, read_byte(ES, BX)); BX++;
  646 ++ write_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL, read_byte(ES, BX)); BX++;
  647 ++ write_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE, read_word(ES, BX)); BX += 2;
  648 ++ for(i=0;i<8;i++) {
  649 ++ write_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i, read_word(ES, BX));
  650 ++ BX += 2;
  651 ++ }
  652 ++ write_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START, read_word(ES, BX)); BX += 2;
  653 ++ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE, read_byte(ES, BX)); BX++;
  654 ++ /* current font */
  655 ++ write_word(0, 0x1f * 4, read_word(ES, BX)); BX += 2;
  656 ++ write_word(0, 0x1f * 4 + 2, read_word(ES, BX)); BX += 2;
  657 ++ write_word(0, 0x43 * 4, read_word(ES, BX)); BX += 2;
  658 ++ write_word(0, 0x43 * 4 + 2, read_word(ES, BX)); BX += 2;
  659 ++ }
  660 ++ if (CX & 4) {
  661 ++ BX++;
  662 ++ v = read_byte(ES, BX); BX++;
  663 ++ outb(VGAREG_PEL_MASK, read_byte(ES, BX)); BX++;
  664 ++ // Set the whole dac always, from 0
  665 ++ outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
  666 ++ for(i=0;i<256*3;i++) {
  667 ++ outb(VGAREG_DAC_DATA, read_byte(ES, BX)); BX++;
  668 ++ }
  669 ++ BX++;
  670 ++ outb(VGAREG_DAC_WRITE_ADDRESS, v);
  671 ++ }
  672 ++ return BX;
  673 + }
2477 674
2478 - #endif 675 + // ============================================================================================
  676 +diff -u -w vbetables-gen.c
  677 +--- vbetables-gen.c 1970-01-01 01:00:00.000000000 +0100
  678 ++++ vbetables-gen.c 2006-06-14 00:52:18.000000000 +0200
  679 +@@ -0,0 +1,217 @@
  680 ++/* Generate the VGABIOS VBE Tables */
  681 ++#include <stdlib.h>
  682 ++#include <stdio.h>
  683 ++
  684 ++typedef struct {
  685 ++ int width;
  686 ++ int height;
  687 ++ int depth;
  688 ++ int mode;
  689 ++} ModeInfo;
  690 ++
  691 ++ModeInfo modes[] = {
  692 ++ /* standard VESA modes */
  693 ++{ 640, 400, 8 , 0x100},
  694 ++{ 640, 480, 8 , 0x101},
  695 ++{ 800, 600, 4 , 0x102},
  696 ++{ 800, 600, 8 , 0x103},
  697 ++ //{ 1024, 768, 4 , 0x104},
  698 ++{ 1024, 768, 8 , 0x105},
  699 ++ //{ 1280, 1024, 4 , 0x106},
  700 ++{ 1280, 1024, 8 , 0x107},
  701 ++{ 320, 200, 15 , 0x10D},
  702 ++{ 320, 200, 16 , 0x10E},
  703 ++{ 320, 200, 24 , 0x10F},
  704 ++{ 640, 480, 15 , 0x110},
  705 ++{ 640, 480, 16 , 0x111},
  706 ++{ 640, 480, 24 , 0x112},
  707 ++{ 800, 600, 15 , 0x113},
  708 ++{ 800, 600, 16 , 0x114},
  709 ++{ 800, 600, 24 , 0x115},
  710 ++{ 1024, 768, 15 , 0x116},
  711 ++{ 1024, 768, 16 , 0x117},
  712 ++{ 1024, 768, 24 , 0x118},
  713 ++{ 1280, 1024, 15 , 0x119},
  714 ++{ 1280, 1024, 16 , 0x11A},
  715 ++{ 1280, 1024, 24 , 0x11B},
  716 ++{ 1600, 1200, 8 , 0x11C},
  717 ++{ 1600, 1200, 15 , 0x11D},
  718 ++{ 1600, 1200, 16 , 0x11E},
  719 ++{ 1600, 1200, 24 , 0x11F},
  720 ++
  721 ++ /* BOCHS/PLE, 86 'own' mode numbers */
  722 ++{ 320, 200, 32 , 0x140},
  723 ++{ 640, 400, 32 , 0x141},
  724 ++{ 640, 480, 32 , 0x142},
  725 ++{ 800, 600, 32 , 0x143},
  726 ++{ 1024, 768, 32 , 0x144},
  727 ++{ 1280, 1024, 32 , 0x145},
  728 ++{ 320, 200, 8 , 0x146},
  729 ++{ 1600, 1200, 32 , 0x147},
  730 ++{ 1152, 864, 8 , 0x148},
  731 ++{ 1152, 864, 15 , 0x149},
  732 ++{ 1152, 864, 16 , 0x14a},
  733 ++{ 1152, 864, 24 , 0x14b},
  734 ++{ 1152, 864, 32 , 0x14c},
  735 ++{ 0, },
  736 ++};
  737 ++
  738 ++int main(int argc, char **argv)
  739 ++{
  740 ++ const ModeInfo *pm;
  741 ++ int pitch, r_size, r_pos, g_size, g_pos, b_size, b_pos, a_size, a_pos;
  742 ++ const char *str;
  743 ++
  744 ++ printf("/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */\n");
  745 ++ printf("static ModeInfoListItem mode_info_list[]=\n");
  746 ++ printf("{\n");
  747 ++ for(pm = modes; pm->mode != 0; pm++) {
  748 ++ printf("{ 0x%04x, /* %dx%dx%d */\n",
  749 ++ pm->mode, pm->width, pm->height, pm->depth);
  750 ++ printf("{ /*Bit16u ModeAttributes*/ %s,\n",
  751 ++ "VBE_MODE_ATTRIBUTE_SUPPORTED | "
  752 ++ "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
  753 ++ "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
  754 ++ "VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | "
  755 ++ "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
  756 ++
  757 ++ printf("/*Bit8u WinAAttributes*/ %s,\n",
  758 ++ "VBE_WINDOW_ATTRIBUTE_RELOCATABLE | "
  759 ++ "VBE_WINDOW_ATTRIBUTE_READABLE | "
  760 ++ "VBE_WINDOW_ATTRIBUTE_WRITEABLE");
  761 ++
  762 ++ printf("/*Bit8u WinBAttributes*/ %d,\n", 0);
  763 ++
  764 ++ printf("/*Bit16u WinGranularity*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
  765 ++
  766 ++ printf("/*Bit16u WinSize*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
  767 ++
  768 ++ printf("/*Bit16u WinASegment*/ %s,\n", "VGAMEM_GRAPH");
  769 ++
  770 ++ printf("/*Bit16u WinBSegment*/ 0x%04x,\n", 0);
  771 ++
  772 ++ printf("/*Bit32u WinFuncPtr*/ %d,\n", 0);
  773 ++
  774 ++ if (pm->depth == 4)
  775 ++ pitch = (pm->width + 7) / 8;
  776 ++ else
  777 ++ pitch = pm->width * ((pm->depth + 7) / 8);
  778 ++ printf("/*Bit16u BytesPerScanLine*/ %d,\n", pitch);
  779 ++
  780 ++ // Mandatory information for VBE 1.2 and above
  781 ++ printf("/*Bit16u XResolution*/ %d,\n", pm->width);
  782 ++ printf("/*Bit16u YResolution*/ %d,\n", pm->height);
  783 ++ printf("/*Bit8u XCharSize*/ %d,\n", 8);
  784 ++ printf("/*Bit8u YCharSize*/ %d,\n", 16);
  785 ++ if (pm->depth == 4) {
  786 ++ printf("/*Bit8u NumberOfPlanes*/ %d,\n", 4);
  787 ++ printf("/*Bit8u BitsPerPixel*/ %d,\n", pm->depth);
  788 ++ } else {
  789 ++ printf("/*Bit8u NumberOfPlanes*/ %d,\n", 1);
  790 ++ printf("/*Bit8u BitsPerPixel*/ %d,\n", pm->depth);
  791 ++ }
  792 ++ printf("/*Bit8u NumberOfBanks*/ %d,\n",
  793 ++ (pm->height * pitch + 65535) / 65536);
  794 ++
  795 ++ if (pm->depth == 4)
  796 ++ str = "VBE_MEMORYMODEL_PLANAR";
  797 ++ else if (pm->depth == 8)
  798 ++ str = "VBE_MEMORYMODEL_PACKED_PIXEL";
  799 ++ else
  800 ++ str = "VBE_MEMORYMODEL_DIRECT_COLOR";
  801 ++ printf("/*Bit8u MemoryModel*/ %s,\n", str);
  802 ++ printf("/*Bit8u BankSize*/ %d,\n", 0);
  803 ++ /* XXX: check */
  804 ++ printf("/*Bit8u NumberOfImagePages*/ %d,\n", 0);
  805 ++ printf("/*Bit8u Reserved_page*/ %d,\n", 0);
  806 ++
  807 ++ // Direct Color fields (required for direct/6 and YUV/7 memory models)
  808 ++ switch(pm->depth) {
  809 ++ case 15:
  810 ++ r_size = 5;
  811 ++ r_pos = 10;
  812 ++ g_size = 5;
  813 ++ g_pos = 5;
  814 ++ b_size = 5;
  815 ++ b_pos = 0;
  816 ++ a_size = 1;
  817 ++ a_pos = 15;
  818 ++ break;
  819 ++ case 16:
  820 ++ r_size = 5;
  821 ++ r_pos = 11;
  822 ++ g_size = 6;
  823 ++ g_pos = 5;
  824 ++ b_size = 5;
  825 ++ b_pos = 0;
  826 ++ a_size = 0;
  827 ++ a_pos = 0;
  828 ++ break;
  829 ++ case 24:
  830 ++ r_size = 8;
  831 ++ r_pos = 16;
  832 ++ g_size = 8;
  833 ++ g_pos = 8;
  834 ++ b_size = 8;
  835 ++ b_pos = 0;
  836 ++ a_size = 0;
  837 ++ a_pos = 0;
  838 ++ break;
  839 ++ case 32:
  840 ++ r_size = 8;
  841 ++ r_pos = 16;
  842 ++ g_size = 8;
  843 ++ g_pos = 8;
  844 ++ b_size = 8;
  845 ++ b_pos = 0;
  846 ++ a_size = 8;
  847 ++ a_pos = 24;
  848 ++ break;
  849 ++ default:
  850 ++ r_size = 0;
  851 ++ r_pos = 0;
  852 ++ g_size = 0;
  853 ++ g_pos = 0;
  854 ++ b_size = 0;
  855 ++ b_pos = 0;
  856 ++ a_size = 0;
  857 ++ a_pos = 0;
  858 ++ break;
  859 ++ }
  860 ++
  861 ++ printf("/*Bit8u RedMaskSize*/ %d,\n", r_size);
  862 ++ printf("/*Bit8u RedFieldPosition*/ %d,\n", r_pos);
  863 ++ printf("/*Bit8u GreenMaskSize*/ %d,\n", g_size);
  864 ++ printf("/*Bit8u GreenFieldPosition*/ %d,\n", g_pos);
  865 ++ printf("/*Bit8u BlueMaskSize*/ %d,\n", b_size);
  866 ++ printf("/*Bit8u BlueFieldPosition*/ %d,\n", b_pos);
  867 ++ printf("/*Bit8u RsvdMaskSize*/ %d,\n", a_size);
  868 ++ printf("/*Bit8u RsvdFieldPosition*/ %d,\n", a_pos);
  869 ++ printf("/*Bit8u DirectColorModeInfo*/ %d,\n", 0);
  870 ++
  871 ++// Mandatory information for VBE 2.0 and above
  872 ++ printf("/*Bit32u PhysBasePtr*/ %s,\n",
  873 ++ "VBE_DISPI_LFB_PHYSICAL_ADDRESS");
  874 ++ printf("/*Bit32u OffScreenMemOffset*/ %d,\n", 0);
  875 ++ printf("/*Bit16u OffScreenMemSize*/ %d,\n", 0);
  876 ++ // Mandatory information for VBE 3.0 and above
  877 ++ printf("/*Bit16u LinBytesPerScanLine*/ %d,\n", pitch);
  878 ++ printf("/*Bit8u BnkNumberOfPages*/ %d,\n", 0);
  879 ++ printf("/*Bit8u LinNumberOfPages*/ %d,\n", 0);
  880 ++ printf("/*Bit8u LinRedMaskSize*/ %d,\n", r_size);
  881 ++ printf("/*Bit8u LinRedFieldPosition*/ %d,\n", r_pos);
  882 ++ printf("/*Bit8u LinGreenMaskSize*/ %d,\n", g_size);
  883 ++ printf("/*Bit8u LinGreenFieldPosition*/ %d,\n", g_pos);
  884 ++ printf("/*Bit8u LinBlueMaskSize*/ %d,\n", b_size);
  885 ++ printf("/*Bit8u LinBlueFieldPosition*/ %d,\n", b_pos);
  886 ++ printf("/*Bit8u LinRsvdMaskSize*/ %d,\n", a_size);
  887 ++ printf("/*Bit8u LinRsvdFieldPosition*/ %d,\n", a_pos);
  888 ++ printf("/*Bit32u MaxPixelClock*/ %d,\n", 0);
  889 ++ printf("} },\n");
  890 ++ }
  891 ++ printf("{ VBE_VESA_MODE_END_OF_LIST,\n");
  892 ++ printf("{ 0,\n");
  893 ++ printf("} },\n");
  894 ++ printf("};\n");
  895 ++ return 0;
  896 ++}