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 27 Index: clext.c
2 28 ===================================================================
3 29 RCS file: /sources/vgabios/vgabios/clext.c,v
4 30 retrieving revision 1.10
5 31 diff -u -w -r1.10 clext.c
6 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 34 @@ -544,6 +544,13 @@
9 35 cirrus_set_video_mode_extended:
10 36 call cirrus_switch_mode
... ... @@ -72,14 +98,289 @@ diff -u -w -r1.10 clext.c
72 98 cirrus_extbios_handlers:
73 99 ;; 80h
74 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 354 Index: vbe.h
76 355 ===================================================================
77 356 RCS file: /sources/vgabios/vgabios/vbe.h,v
78 357 retrieving revision 1.24
79 358 diff -u -w -r1.24 vbe.h
80 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 384 #define VBE_VESA_MODE_1280X1024X1555 0x119
84 385 #define VBE_VESA_MODE_1280X1024X565 0x11A
85 386 #define VBE_VESA_MODE_1280X1024X888 0x11B
... ... @@ -90,7 +391,7 @@ diff -u -w -r1.24 vbe.h
90 391  
91 392 // BOCHS/PLEX86 'own' mode numbers
92 393 #define VBE_OWN_MODE_320X200X8888 0x140
93   -@@ -202,6 +206,12 @@
  394 +@@ -202,6 +212,12 @@
94 395 #define VBE_OWN_MODE_1024X768X8888 0x144
95 396 #define VBE_OWN_MODE_1280X1024X8888 0x145
96 397 #define VBE_OWN_MODE_320X200X8 0x146
... ... @@ -103,7 +404,7 @@ diff -u -w -r1.24 vbe.h
103 404  
104 405 #define VBE_VESA_MODE_END_OF_LIST 0xFFFF
105 406  
106   -@@ -259,7 +269,7 @@
  407 +@@ -259,7 +275,7 @@
107 408 // like 0xE0000000
108 409  
109 410  
... ... @@ -112,2367 +413,484 @@ diff -u -w -r1.24 vbe.h
112 413  
113 414 #define VBE_DISPI_BANK_ADDRESS 0xA0000
114 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 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 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 ++}
... ...