Commit 68d5736aeeda5ced448737a071b0b4c890341be7

Authored by aliguori
1 parent e872aa81

Remove obsolete VGABIOS patch.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6116 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 0 additions and 896 deletions
pc-bios/vgabios.diff deleted 100644 → 0
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 > $@  
27 -Index: clext.c  
28 -===================================================================  
29 -RCS file: /sources/vgabios/vgabios/clext.c,v  
30 -retrieving revision 1.10  
31 -diff -u -w -r1.10 clext.c  
32 ---- clext.c 25 Mar 2006 10:19:15 -0000 1.10  
33 -+++ clext.c 14 Jun 2006 00:51:06 -0000  
34 -@@ -544,6 +544,13 @@  
35 - cirrus_set_video_mode_extended:  
36 - call cirrus_switch_mode  
37 - pop ax ;; mode  
38 -+ test al, #0x80  
39 -+ jnz cirrus_set_video_mode_extended_1  
40 -+ push ax  
41 -+ mov ax, #0xffff ; set to 0xff to keep win 2K happy  
42 -+ call cirrus_clear_vram  
43 -+ pop ax  
44 -+cirrus_set_video_mode_extended_1:  
45 - and al, #0x7f  
46 -  
47 - push ds  
48 -@@ -1011,6 +1018,13 @@  
49 - jnz cirrus_vesa_02h_3  
50 - call cirrus_enable_16k_granularity  
51 - cirrus_vesa_02h_3:  
52 -+ test bx, #0x8000 ;; no clear  
53 -+ jnz cirrus_vesa_02h_4  
54 -+ push ax  
55 -+ xor ax,ax  
56 -+ call cirrus_clear_vram  
57 -+ pop ax  
58 -+cirrus_vesa_02h_4:  
59 - pop ax  
60 - push ds  
61 - #ifdef CIRRUS_VESA3_PMINFO  
62 -@@ -1479,6 +1493,38 @@  
63 - pop bx  
64 - ret  
65 -  
66 -+cirrus_clear_vram:  
67 -+ pusha  
68 -+ push es  
69 -+ mov si, ax  
70 -+  
71 -+ call cirrus_enable_16k_granularity  
72 -+ call cirrus_extbios_85h  
73 -+ shl al, #2  
74 -+ mov bl, al  
75 -+ xor ah,ah  
76 -+cirrus_clear_vram_1:  
77 -+ mov al, #0x09  
78 -+ mov dx, #0x3ce  
79 -+ out dx, ax  
80 -+ push ax  
81 -+ mov cx, #0xa000  
82 -+ mov es, cx  
83 -+ xor di, di  
84 -+ mov ax, si  
85 -+ mov cx, #8192  
86 -+ cld  
87 -+ rep  
88 -+ stosw  
89 -+ pop ax  
90 -+ inc ah  
91 -+ cmp ah, bl  
92 -+ jne cirrus_clear_vram_1  
93 -+  
94 -+ pop es  
95 -+ popa  
96 -+ ret  
97 -+  
98 - cirrus_extbios_handlers:  
99 - ;; 80h  
100 - dw cirrus_extbios_80h  
101 -Index: vbe.c  
102 -===================================================================  
103 -RCS file: /sources/vgabios/vgabios/vbe.c,v  
104 -retrieving revision 1.48  
105 -diff -u -w -r1.48 vbe.c  
106 ---- vbe.c 26 Dec 2005 19:50:26 -0000 1.48  
107 -+++ vbe.c 14 Jun 2006 00:51:07 -0000  
108 -@@ -118,21 +118,114 @@  
109 - .word VBE_VESA_MODE_END_OF_LIST  
110 - #endif  
111 -  
112 -+ .align 2  
113 - vesa_pm_start:  
114 - dw vesa_pm_set_window - vesa_pm_start  
115 -- dw vesa_pm_set_display_strt - vesa_pm_start  
116 -+ dw vesa_pm_set_display_start - vesa_pm_start  
117 - dw vesa_pm_unimplemented - vesa_pm_start  
118 -- dw 0  
119 -+ dw vesa_pm_io_ports_table - vesa_pm_start  
120 -+vesa_pm_io_ports_table:  
121 -+ dw VBE_DISPI_IOPORT_INDEX  
122 -+ dw VBE_DISPI_IOPORT_INDEX + 1  
123 -+ dw VBE_DISPI_IOPORT_DATA  
124 -+ dw VBE_DISPI_IOPORT_DATA + 1  
125 -+ dw 0xffff  
126 -+ dw 0xffff  
127 -  
128 - USE32  
129 - vesa_pm_set_window:  
130 -- mov ax, #0x4f05  
131 -- int #0x10  
132 -+ cmp bx, #0x00  
133 -+ je vesa_pm_set_display_window1  
134 -+ mov ax, #0x0100  
135 -+ ret  
136 -+vesa_pm_set_display_window1:  
137 -+ mov ax, dx  
138 -+ push dx  
139 -+ push ax  
140 -+ mov dx, # VBE_DISPI_IOPORT_INDEX  
141 -+ mov ax, # VBE_DISPI_INDEX_BANK  
142 -+ out dx, ax  
143 -+ pop ax  
144 -+ mov dx, # VBE_DISPI_IOPORT_DATA  
145 -+ out dx, ax  
146 -+ pop dx  
147 -+ mov ax, #0x004f  
148 - ret  
149 -  
150 - vesa_pm_set_display_start:  
151 -- mov ax, #0x4f07  
152 -- int #0x10  
153 -+ cmp bl, #0x80  
154 -+ je vesa_pm_set_display_start1  
155 -+ cmp bl, #0x00  
156 -+ je vesa_pm_set_display_start1  
157 -+ mov ax, #0x0100  
158 -+ ret  
159 -+vesa_pm_set_display_start1:  
160 -+; convert offset to (X, Y) coordinate  
161 -+; (would be simpler to change Bochs VBE API...)  
162 -+ push eax  
163 -+ push ecx  
164 -+ push edx  
165 -+ push esi  
166 -+ push edi  
167 -+ shl edx, #16  
168 -+ and ecx, #0xffff  
169 -+ or ecx, edx  
170 -+ shl ecx, #2  
171 -+ mov eax, ecx  
172 -+  
173 -+ push eax  
174 -+ mov dx, # VBE_DISPI_IOPORT_INDEX  
175 -+ mov ax, # VBE_DISPI_INDEX_VIRT_WIDTH  
176 -+ out dx, ax  
177 -+ mov dx, # VBE_DISPI_IOPORT_DATA  
178 -+ in ax, dx  
179 -+ movzx ecx, ax  
180 -+  
181 -+ mov dx, # VBE_DISPI_IOPORT_INDEX  
182 -+ mov ax, # VBE_DISPI_INDEX_BPP  
183 -+ out dx, ax  
184 -+ mov dx, # VBE_DISPI_IOPORT_DATA  
185 -+ in ax, dx  
186 -+ movzx esi, ax  
187 -+ pop eax  
188 -+  
189 -+ add esi, #7  
190 -+ shr esi, #3  
191 -+ imul ecx, esi  
192 -+ xor edx, edx  
193 -+ div ecx  
194 -+ mov edi, eax  
195 -+ mov eax, edx  
196 -+ xor edx, edx  
197 -+ div esi  
198 -+  
199 -+ push dx  
200 -+ push ax  
201 -+ mov dx, # VBE_DISPI_IOPORT_INDEX  
202 -+ mov ax, # VBE_DISPI_INDEX_X_OFFSET  
203 -+ out dx, ax  
204 -+ pop ax  
205 -+ mov dx, # VBE_DISPI_IOPORT_DATA  
206 -+ out dx, ax  
207 -+ pop dx  
208 -+  
209 -+ mov ax, di  
210 -+ push dx  
211 -+ push ax  
212 -+ mov dx, # VBE_DISPI_IOPORT_INDEX  
213 -+ mov ax, # VBE_DISPI_INDEX_Y_OFFSET  
214 -+ out dx, ax  
215 -+ pop ax  
216 -+ mov dx, # VBE_DISPI_IOPORT_DATA  
217 -+ out dx, ax  
218 -+ pop dx  
219 -+  
220 -+ pop edi  
221 -+ pop esi  
222 -+ pop edx  
223 -+ pop ecx  
224 -+ pop eax  
225 -+ mov ax, #0x004f  
226 - ret  
227 -  
228 - vesa_pm_unimplemented:  
229 -@@ -835,6 +928,64 @@  
230 - ASM_END  
231 -  
232 -  
233 -+Bit16u vbe_biosfn_read_video_state_size()  
234 -+{  
235 -+ return 9 * 2;  
236 -+}  
237 -+  
238 -+void vbe_biosfn_save_video_state(ES, BX)  
239 -+ Bit16u ES; Bit16u BX;  
240 -+{  
241 -+ Bit16u enable, i;  
242 -+  
243 -+ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);  
244 -+ enable = inw(VBE_DISPI_IOPORT_DATA);  
245 -+ write_word(ES, BX, enable);  
246 -+ BX += 2;  
247 -+ if (!(enable & VBE_DISPI_ENABLED))  
248 -+ return;  
249 -+ for(i = VBE_DISPI_INDEX_XRES; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {  
250 -+ if (i != VBE_DISPI_INDEX_ENABLE) {  
251 -+ outw(VBE_DISPI_IOPORT_INDEX, i);  
252 -+ write_word(ES, BX, inw(VBE_DISPI_IOPORT_DATA));  
253 -+ BX += 2;  
254 -+ }  
255 -+ }  
256 -+}  
257 -+  
258 -+  
259 -+void vbe_biosfn_restore_video_state(ES, BX)  
260 -+ Bit16u ES; Bit16u BX;  
261 -+{  
262 -+ Bit16u enable, i;  
263 -+  
264 -+ enable = read_word(ES, BX);  
265 -+ BX += 2;  
266 -+  
267 -+ if (!(enable & VBE_DISPI_ENABLED)) {  
268 -+ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);  
269 -+ outw(VBE_DISPI_IOPORT_DATA, enable);  
270 -+ } else {  
271 -+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_XRES);  
272 -+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));  
273 -+ BX += 2;  
274 -+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);  
275 -+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));  
276 -+ BX += 2;  
277 -+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);  
278 -+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));  
279 -+ BX += 2;  
280 -+ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);  
281 -+ outw(VBE_DISPI_IOPORT_DATA, enable);  
282 -+  
283 -+ for(i = VBE_DISPI_INDEX_BANK; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {  
284 -+ outw(VBE_DISPI_IOPORT_INDEX, i);  
285 -+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));  
286 -+ BX += 2;  
287 -+ }  
288 -+ }  
289 -+}  
290 -+  
291 - /** Function 04h - Save/Restore State  
292 - *  
293 - * Input:  
294 -@@ -849,10 +1000,48 @@  
295 - * BX = Number of 64-byte blocks to hold the state buffer (if DL=00h)  
296 - *  
297 - */  
298 --void vbe_biosfn_save_restore_state(AX, DL, CX, ES, BX)  
299 -+void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX)  
300 -+Bit16u *AX; Bit16u CX; Bit16u DX; Bit16u ES; Bit16u *BX;  
301 - {  
302 --}  
303 -+ Bit16u ss=get_SS();  
304 -+ Bit16u result, val;  
305 -  
306 -+ result = 0x4f;  
307 -+ switch(GET_DL()) {  
308 -+ case 0x00:  
309 -+ val = biosfn_read_video_state_size2(CX);  
310 -+#ifdef DEBUG  
311 -+ printf("VGA state size=%x\n", val);  
312 -+#endif  
313 -+ if (CX & 8)  
314 -+ val += vbe_biosfn_read_video_state_size();  
315 -+ write_word(ss, BX, val);  
316 -+ break;  
317 -+ case 0x01:  
318 -+ val = read_word(ss, BX);  
319 -+ val = biosfn_save_video_state(CX, ES, val);  
320 -+#ifdef DEBUG  
321 -+ printf("VGA save_state offset=%x\n", val);  
322 -+#endif  
323 -+ if (CX & 8)  
324 -+ vbe_biosfn_save_video_state(ES, val);  
325 -+ break;  
326 -+ case 0x02:  
327 -+ val = read_word(ss, BX);  
328 -+ val = biosfn_restore_video_state(CX, ES, val);  
329 -+#ifdef DEBUG  
330 -+ printf("VGA restore_state offset=%x\n", val);  
331 -+#endif  
332 -+ if (CX & 8)  
333 -+ vbe_biosfn_restore_video_state(ES, val);  
334 -+ break;  
335 -+ default:  
336 -+ // function failed  
337 -+ result = 0x100;  
338 -+ break;  
339 -+ }  
340 -+ write_word(ss, AX, result);  
341 -+}  
342 -  
343 - /** Function 05h - Display Window Control  
344 - *  
345 -@@ -1090,7 +1279,7 @@  
346 - */  
347 - ASM_START  
348 - vbe_biosfn_return_protected_mode_interface:  
349 -- test bx, bx  
350 -+ test bl, bl  
351 - jnz _fail  
352 - mov di, #0xc000  
353 - mov es, di  
354 -Index: vbe.h  
355 -===================================================================  
356 -RCS file: /sources/vgabios/vgabios/vbe.h,v  
357 -retrieving revision 1.24  
358 -diff -u -w -r1.24 vbe.h  
359 ---- vbe.h 9 May 2004 20:31:31 -0000 1.24  
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 @@  
384 - #define VBE_VESA_MODE_1280X1024X1555 0x119  
385 - #define VBE_VESA_MODE_1280X1024X565 0x11A  
386 - #define VBE_VESA_MODE_1280X1024X888 0x11B  
387 -+#define VBE_VESA_MODE_1600X1200X8 0x11C  
388 -+#define VBE_VESA_MODE_1600X1200X1555 0x11D  
389 -+#define VBE_VESA_MODE_1600X1200X565 0x11E  
390 -+#define VBE_VESA_MODE_1600X1200X888 0x11F  
391 -  
392 - // BOCHS/PLEX86 'own' mode numbers  
393 - #define VBE_OWN_MODE_320X200X8888 0x140  
394 -@@ -202,6 +212,12 @@  
395 - #define VBE_OWN_MODE_1024X768X8888 0x144  
396 - #define VBE_OWN_MODE_1280X1024X8888 0x145  
397 - #define VBE_OWN_MODE_320X200X8 0x146  
398 -+#define VBE_OWN_MODE_1600X1200X8888 0x147  
399 -+#define VBE_OWN_MODE_1152X864X8 0x148  
400 -+#define VBE_OWN_MODE_1152X864X1555 0x149  
401 -+#define VBE_OWN_MODE_1152X864X565 0x14a  
402 -+#define VBE_OWN_MODE_1152X864X888 0x14b  
403 -+#define VBE_OWN_MODE_1152X864X8888 0x14c  
404 -  
405 - #define VBE_VESA_MODE_END_OF_LIST 0xFFFF  
406 -  
407 -@@ -259,7 +275,7 @@  
408 - // like 0xE0000000  
409 -  
410 -  
411 -- #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 4  
412 -+ #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8  
413 -  
414 - #define VBE_DISPI_BANK_ADDRESS 0xA0000  
415 - #define VBE_DISPI_BANK_SIZE_KB 64  
416 -Index: vgabios.c  
417 -===================================================================  
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 - }  
450 -  
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;  
456 - {  
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();  
480 --#endif  
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();  
491 --#endif  
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 - }  
674 -  
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 -+}