Commit 1c46d7139a4d2c4491ce2459f9a32c1be85e23d5

Authored by bellard
1 parent f815fa45

clear screen when changing graphic mode in Cirrus VGA BIOS (aka win2k mode change bug)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1925 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 25 Mar 2006 01:19:02 -0000  
8 -@@ -17,9 +17,9 @@  
9 - all: bios cirrus-bios  
10 -  
11 -  
12 --bios: biossums vgabios.bin vgabios.debug.bin  
13 -+bios: biossums vgabios.bin #vgabios.debug.bin  
14 -  
15 --cirrus-bios: vgabios-cirrus.bin vgabios-cirrus.debug.bin  
16 -+cirrus-bios: vgabios-cirrus.bin #vgabios-cirrus.debug.bin  
17 -  
18 - clean:  
19 - /bin/rm -f biossums *.o *.s *.ld86 \  
20 Index: clext.c 1 Index: clext.c
21 =================================================================== 2 ===================================================================
22 RCS file: /sources/vgabios/vgabios/clext.c,v 3 RCS file: /sources/vgabios/vgabios/clext.c,v
23 -retrieving revision 1.9  
24 -diff -u -w -r1.9 clext.c  
25 ---- clext.c 4 Dec 2004 15:26:17 -0000 1.9  
26 -+++ clext.c 25 Mar 2006 01:19:03 -0000  
27 -@@ -238,6 +238,21 @@  
28 - 0xffff  
29 - };  
30 -  
31 -+/* 1600x1200x8 */  
32 -+unsigned short cseq_1600x1200x8[] = {  
33 -+0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,  
34 -+0x760b,0x760c,0x760d,0x760e,  
35 -+0x0412,0x0013,0x2017,  
36 -+0x341b,0x341c,0x341d,0x341e,  
37 -+0xffff  
38 -+};  
39 -+unsigned short ccrtc_1600x1200x8[] = {  
40 -+0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,  
41 -+0x6009,0x000c,0x000d,  
42 -+0x0310,0xff12,0xa013,0x4014,0xff15,0x2416,0xc317,0xff18,  
43 -+0x001a,0x221b,0x001d,  
44 -+0xffff  
45 -+};  
46 -  
47 - cirrus_mode_t cirrus_modes[] =  
48 - {  
49 -@@ -291,6 +306,10 @@  
50 - cseq_1280x1024x16,cgraph_svgacolor,ccrtc_1280x1024x16,16,  
51 - 6,5,11,6,5,5,0,0,0},  
52 -  
53 -+ {0x7b,1600,1200,8,0x00,  
54 -+ cseq_1600x1200x8,cgraph_svgacolor,ccrtc_1600x1200x8,8,  
55 -+ 4,0,0,0,0,0,0,0,0},  
56 -+  
57 - {0xfe,0,0,0,0,cseq_vga,cgraph_vga,ccrtc_vga,0,  
58 - 0xff,0,0,0,0,0,0,0,0},  
59 - {0xff,0,0,0,0,0,0,0,0,  
60 -Index: vgabios.c  
61 -===================================================================  
62 -RCS file: /sources/vgabios/vgabios/vgabios.c,v  
63 -retrieving revision 1.63  
64 -diff -u -w -r1.63 vgabios.c  
65 ---- vgabios.c 26 Dec 2005 19:50:26 -0000 1.63  
66 -+++ vgabios.c 25 Mar 2006 01:19:03 -0000  
67 -@@ -111,6 +111,7 @@  
68 - static void biosfn_read_video_state_size();  
69 - static void biosfn_save_video_state();  
70 - static void biosfn_restore_video_state();  
71 -+extern Bit8u video_save_pointer_table[];  
72 -  
73 - // This is for compiling with gcc2 and gcc3  
74 - #define ASM_START #asm  
75 -@@ -459,6 +460,29 @@  
76 -  
77 - pop ds 4 +retrieving revision 1.10
  5 +diff -u -w -r1.10 clext.c
  6 +--- clext.c 25 Mar 2006 10:19:15 -0000 1.10
  7 ++++ clext.c 14 May 2006 20:49:29 -0000
  8 +@@ -544,6 +544,13 @@
  9 + cirrus_set_video_mode_extended:
  10 + call cirrus_switch_mode
  11 + pop ax ;; mode
  12 ++ test al, #0x80
  13 ++ jnz cirrus_set_video_mode_extended_1
  14 ++ push ax
  15 ++ mov ax, #0xffff ; set to 0xff to keep win 2K happy
  16 ++ call cirrus_clear_vram
  17 ++ pop ax
  18 ++cirrus_set_video_mode_extended_1:
  19 + and al, #0x7f
  20 +
  21 + push ds
  22 +@@ -1011,6 +1018,13 @@
  23 + jnz cirrus_vesa_02h_3
  24 + call cirrus_enable_16k_granularity
  25 + cirrus_vesa_02h_3:
  26 ++ test bx, #0x8000 ;; no clear
  27 ++ jnz cirrus_vesa_02h_4
  28 ++ push ax
  29 ++ xor ax,ax
  30 ++ call cirrus_clear_vram
  31 ++ pop ax
  32 ++cirrus_vesa_02h_4:
  33 + pop ax
  34 + push ds
  35 + #ifdef CIRRUS_VESA3_PMINFO
  36 +@@ -1479,6 +1493,38 @@
  37 + pop bx
78 ret 38 ret
79 -+  
80 -+_video_save_pointer_table:  
81 -+ .word _video_param_table  
82 -+ .word 0xc000  
83 -+  
84 -+ .word 0 /* XXX: fill it */  
85 -+ .word 0  
86 -+  
87 -+ .word 0 /* XXX: fill it */  
88 -+ .word 0  
89 -+  
90 -+ .word 0 /* XXX: fill it */  
91 -+ .word 0  
92 -+  
93 -+ .word 0 /* XXX: fill it */  
94 -+ .word 0  
95 -+  
96 -+ .word 0 /* XXX: fill it */  
97 -+ .word 0  
98 -+  
99 -+ .word 0 /* XXX: fill it */  
100 -+ .word 0  
101 -+  
102 - ASM_END  
103 -  
104 - // --------------------------------------------------------------------------------------------  
105 -@@ -780,8 +804,8 @@  
106 -  
107 - // Should we clear the screen ?  
108 - Bit8u noclearmem=mode&0x80;  
109 -- Bit8u line,mmask,*palette;  
110 -- Bit16u i,twidth,theight,cheight;  
111 -+ Bit8u line,mmask,*palette,vpti;  
112 -+ Bit16u i,twidth,theightm1,cheight;  
113 - Bit8u modeset_ctl,video_ctl,vga_switches;  
114 - Bit16u crtc_addr;  
115 -  
116 -@@ -804,9 +828,10 @@  
117 - if(line==0xFF)  
118 - return;  
119 -  
120 -- twidth=vga_modes[line].twidth;  
121 -- theight=vga_modes[line].theight;  
122 -- cheight=vga_modes[line].cheight;  
123 -+ vpti=line_to_vpti[line];  
124 -+ twidth=video_param_table[vpti].twidth;  
125 -+ theightm1=video_param_table[vpti].theightm1;  
126 -+ cheight=video_param_table[vpti].cheight;  
127 -  
128 - // Read the bios vga control  
129 - video_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL);  
130 -@@ -866,21 +891,25 @@  
131 - inb(VGAREG_ACTL_RESET);  
132 -  
133 - // Set Attribute Ctl  
134 -- for(i=0;i<=ACTL_MAX_REG;i++)  
135 -+ for(i=0;i<=0x13;i++)  
136 - {outb(VGAREG_ACTL_ADDRESS,i);  
137 -- outb(VGAREG_ACTL_WRITE_DATA,actl_regs[vga_modes[line].actlmodel][i]);  
138 -+ outb(VGAREG_ACTL_WRITE_DATA,video_param_table[vpti].actl_regs[i]);  
139 - }  
140 -+ outb(VGAREG_ACTL_ADDRESS,0x14);  
141 -+ outb(VGAREG_ACTL_WRITE_DATA,0x00);  
142 -  
143 - // Set Sequencer Ctl  
144 -- for(i=0;i<=SEQU_MAX_REG;i++)  
145 -+ outb(VGAREG_SEQU_ADDRESS,0);  
146 -+ outb(VGAREG_SEQU_DATA,0x03);  
147 -+ for(i=1;i<=4;i++)  
148 - {outb(VGAREG_SEQU_ADDRESS,i);  
149 -- outb(VGAREG_SEQU_DATA,sequ_regs[vga_modes[line].sequmodel][i]);  
150 -+ outb(VGAREG_SEQU_DATA,video_param_table[vpti].sequ_regs[i - 1]);  
151 - }  
152 -  
153 - // Set Grafx Ctl  
154 -- for(i=0;i<=GRDC_MAX_REG;i++)  
155 -+ for(i=0;i<=8;i++)  
156 - {outb(VGAREG_GRDC_ADDRESS,i);  
157 -- outb(VGAREG_GRDC_DATA,grdc_regs[vga_modes[line].grdcmodel][i]);  
158 -+ outb(VGAREG_GRDC_DATA,video_param_table[vpti].grdc_regs[i]);  
159 - }  
160 -  
161 - // Set CRTC address VGA or MDA  
162 -@@ -889,13 +918,13 @@  
163 - // Disable CRTC write protection  
164 - outw(crtc_addr,0x0011);  
165 - // Set CRTC regs  
166 -- for(i=0;i<=CRTC_MAX_REG;i++)  
167 -+ for(i=0;i<=0x18;i++)  
168 - {outb(crtc_addr,i);  
169 -- outb(crtc_addr+1,crtc_regs[vga_modes[line].crtcmodel][i]);  
170 -+ outb(crtc_addr+1,video_param_table[vpti].crtc_regs[i]);  
171 - }  
172 -  
173 - // Set the misc register  
174 -- outb(VGAREG_WRITE_MISC_OUTPUT,vga_modes[line].miscreg);  
175 -+ outb(VGAREG_WRITE_MISC_OUTPUT,video_param_table[vpti].miscreg);  
176 39
177 - // Enable video  
178 - outb(VGAREG_ACTL_ADDRESS,0x20);  
179 -@@ -927,9 +956,9 @@  
180 - // Set the BIOS mem  
181 - write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE,mode);  
182 - write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS,twidth);  
183 -- write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE,vga_modes[line].slength);  
184 -+ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE,*(Bit16u *)&video_param_table[vpti].slength_l);  
185 - write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS,crtc_addr);  
186 -- write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS,theight-1);  
187 -+ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS,theightm1);  
188 - write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT,cheight);  
189 - write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL,(0x60|noclearmem));  
190 - write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES,0xF9);  
191 -@@ -937,8 +966,8 @@  
192 -  
193 - // FIXME We nearly have the good tables. to be reworked  
194 - write_byte(BIOSMEM_SEG,BIOSMEM_DCC_INDEX,0x08); // 8 is VGA should be ok for now  
195 -- write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER,0x00);  
196 -- write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER+2,0x00);  
197 -+ write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER, video_save_pointer_table);  
198 -+ write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER+2, 0xc000);  
199 -  
200 - // FIXME  
201 - write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MSR,0x00); // Unavailable on vanilla vga, but...  
202 -@@ -1114,7 +1143,7 @@  
203 - }  
204 - else  
205 - {  
206 -- address = page*vga_modes[line].slength;  
207 -+ address = page * (*(Bit16u *)&video_param_table[line_to_vpti[line]].slength_l);  
208 - }  
209 -  
210 - // CRTC regs 0x0c and 0x0d  
211 -@@ -1271,7 +1300,7 @@  
212 - else  
213 - {  
214 - // FIXME gfx mode not complete  
215 -- cheight=vga_modes[line].cheight;  
216 -+ cheight=video_param_table[line_to_vpti[line]].cheight;  
217 - switch(vga_modes[line].memmodel)  
218 - {  
219 - case PLANAR4:  
220 -@@ -1581,7 +1610,7 @@  
221 - else  
222 - {  
223 - // FIXME gfx mode not complete  
224 -- cheight=vga_modes[line].cheight;  
225 -+ cheight=video_param_table[line_to_vpti[line]].cheight;  
226 - bpp=vga_modes[line].pixbits;  
227 - while((count-->0) && (xcurs<nbcols))  
228 - {  
229 -@@ -1641,7 +1670,7 @@  
230 - else  
231 - {  
232 - // FIXME gfx mode not complete  
233 -- cheight=vga_modes[line].cheight;  
234 -+ cheight=video_param_table[line_to_vpti[line]].cheight;  
235 - bpp=vga_modes[line].pixbits;  
236 - while((count-->0) && (xcurs<nbcols))  
237 - {  
238 -@@ -1949,7 +1978,7 @@  
239 - else  
240 - {  
241 - // FIXME gfx mode not complete  
242 -- cheight=vga_modes[line].cheight;  
243 -+ cheight=video_param_table[line_to_vpti[line]].cheight;  
244 - bpp=vga_modes[line].pixbits;  
245 - switch(vga_modes[line].memmodel)  
246 - {  
247 -Index: vgatables.h  
248 -===================================================================  
249 -RCS file: /sources/vgabios/vgabios/vgatables.h,v  
250 -retrieving revision 1.9  
251 -diff -u -w -r1.9 vgatables.h  
252 ---- vgatables.h 21 Sep 2005 18:45:20 -0000 1.9  
253 -+++ vgatables.h 25 Mar 2006 01:19:04 -0000  
254 -@@ -77,7 +77,7 @@  
255 - * Tables of default values for each mode  
256 - *  
257 - */  
258 --#define MODE_MAX 0x14  
259 -+#define MODE_MAX 15  
260 - #define TEXT 0x00  
261 - #define GRAPH 0x01  
262 -  
263 -@@ -96,126 +96,38 @@  
264 -  
265 - typedef struct  
266 - {Bit8u svgamode;  
267 -- Bit16u vesamode;  
268 - Bit8u class; /* TEXT, GRAPH */  
269 - Bit8u memmodel; /* CTEXT,MTEXT,CGA,PL1,PL2,PL4,P8,P15,P16,P24,P32 */  
270 -- Bit8u nbpages;  
271 - Bit8u pixbits;  
272 -- Bit16u swidth, sheight;  
273 -- Bit16u twidth, theight;  
274 -- Bit16u cwidth, cheight;  
275 - Bit16u sstart;  
276 -- Bit16u slength;  
277 -- Bit8u miscreg;  
278 - Bit8u pelmask;  
279 -- Bit8u crtcmodel;  
280 -- Bit8u actlmodel;  
281 -- Bit8u grdcmodel;  
282 -- Bit8u sequmodel;  
283 - Bit8u dacmodel; /* 0 1 2 3 */  
284 - } VGAMODES;  
285 -  
286 - static VGAMODES vga_modes[MODE_MAX+1]=  
287 --{//mode vesa class model pg bits sw sh tw th cw ch sstart slength misc pelm crtc actl gdc sequ dac  
288 -- {0x00, 0xFFFF, TEXT, CTEXT, 8, 4, 360, 400, 40, 25, 9, 16, 0xB800, 0x0800, 0x67, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x02},  
289 -- {0x01, 0xFFFF, TEXT, CTEXT, 8, 4, 360, 400, 40, 25, 9, 16, 0xB800, 0x0800, 0x67, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x02},  
290 -- {0x02, 0xFFFF, TEXT, CTEXT, 4, 4, 720, 400, 80, 25, 9, 16, 0xB800, 0x1000, 0x67, 0xFF, 0x01, 0x00, 0x00, 0x01, 0x02},  
291 -- {0x03, 0xFFFF, TEXT, CTEXT, 4, 4, 720, 400, 80, 25, 9, 16, 0xB800, 0x1000, 0x67, 0xFF, 0x01, 0x00, 0x00, 0x01, 0x02},  
292 -- {0x04, 0xFFFF, GRAPH, CGA, 4, 2, 320, 200, 40, 25, 8, 8, 0xB800, 0x0800, 0x63, 0xFF, 0x02, 0x01, 0x01, 0x02, 0x01},  
293 -- {0x05, 0xFFFF, GRAPH, CGA, 1, 2, 320, 200, 40, 25, 8, 8, 0xB800, 0x0800, 0x63, 0xFF, 0x02, 0x01, 0x01, 0x02, 0x01},  
294 -- {0x06, 0xFFFF, GRAPH, CGA, 1, 1, 640, 200, 80, 25, 8, 8, 0xB800, 0x1000, 0x63, 0xFF, 0x03, 0x02, 0x02, 0x03, 0x01},  
295 -- {0x07, 0xFFFF, TEXT, MTEXT, 4, 4, 720, 400, 80, 25, 9, 16, 0xB000, 0x1000, 0x66, 0xFF, 0x04, 0x03, 0x03, 0x01, 0x00},  
296 -- {0x0D, 0xFFFF, GRAPH, PLANAR4, 8, 4, 320, 200, 40, 25, 8, 8, 0xA000, 0x2000, 0x63, 0xFF, 0x05, 0x04, 0x04, 0x04, 0x01},  
297 -- {0x0E, 0xFFFF, GRAPH, PLANAR4, 4, 4, 640, 200, 80, 25, 8, 8, 0xA000, 0x4000, 0x63, 0xFF, 0x06, 0x04, 0x04, 0x05, 0x01},  
298 -- {0x0F, 0xFFFF, GRAPH, PLANAR1, 2, 1, 640, 350, 80, 25, 8, 14, 0xA000, 0x8000, 0xa3, 0xFF, 0x07, 0x05, 0x04, 0x05, 0x00},  
299 -- {0x10, 0xFFFF, GRAPH, PLANAR4, 2, 4, 640, 350, 80, 25, 8, 14, 0xA000, 0x8000, 0xa3, 0xFF, 0x07, 0x06, 0x04, 0x05, 0x02},  
300 -- {0x11, 0xFFFF, GRAPH, PLANAR1, 1, 1, 640, 480, 80, 30, 8, 16, 0xA000, 0x0000, 0xe3, 0xFF, 0x08, 0x07, 0x04, 0x05, 0x02},  
301 -- {0x12, 0xFFFF, GRAPH, PLANAR4, 1, 4, 640, 480, 80, 30, 8, 16, 0xA000, 0x0000, 0xe3, 0xFF, 0x08, 0x06, 0x04, 0x05, 0x02},  
302 -- {0x13, 0xFFFF, GRAPH, LINEAR8, 1, 8, 320, 200, 40, 25, 8, 8, 0xA000, 0x0000, 0x63, 0xFF, 0x09, 0x08, 0x05, 0x06, 0x03},  
303 -- {0x6A, 0xFFFF, GRAPH, PLANAR4, 1, 4, 800, 600,100, 37, 8, 16, 0xA000, 0x0000, 0xe3, 0xFF, 0x0A, 0x06, 0x04, 0x05, 0x02}  
304 --};  
305 --  
306 --/* CRTC */  
307 --#define CRTC_MAX_REG 0x18  
308 --#define CRTC_MAX_MODEL 0x0A  
309 --static Bit8u crtc_access[CRTC_MAX_REG+1]=  
310 --{ /* 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 */  
311 -- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  
312 --};  
313 --static Bit8u crtc_regs[CRTC_MAX_MODEL+1][CRTC_MAX_REG+1]=  
314 --{/* Model 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 */  
315 -- /* 00 */ 0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,0xff,  
316 -- /* 01 */ 0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,0xff,  
317 -- /* 02 */ 0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,0xff,  
318 -- /* 03 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,0xff,  
319 -- /* 04 */ 0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,0xff,  
320 -- /* 05 */ 0x2d,0x27,0x28,0x90,0x2b,0x80,0xbf,0x1f,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,0xff,  
321 -- /* 06 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,0xff,  
322 -- /* 07 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x85,0x5d,0x28,0x0f,0x63,0xba,0xe3,0xff,  
323 -- /* 08 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x8c,0xdf,0x28,0x00,0xe7,0x04,0xe3,0xff,  
324 -- /* 09 */ 0x5f,0x4f,0x50,0x82,0x54,0x80,0xbf,0x1f,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,0xff,  
325 -- /* 0A */ 0x7f,0x63,0x63,0x83,0x6b,0x1b,0x72,0xf0,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x8d,0x57,0x32,0x00,0x57,0x73,0xe3,0xff  
326 --};  
327 --  
328 --/* Attribute Controler 0x3c0 */  
329 --#define ACTL_MAX_REG 0x14  
330 --#define ACTL_MAX_MODEL 0x08  
331 --  
332 --static Bit8u actl_access[ACTL_MAX_REG+1]=  
333 --{/* 00 01 02 03 04 05 06 07 08 09 0A 0B OC OD OE OF 10 11 12 13 14 */  
334 -- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  
335 --};  
336 --  
337 --static Bit8u actl_regs[ACTL_MAX_MODEL+1][ACTL_MAX_REG+1]=  
338 --{/* Model 00 01 02 03 04 05 06 07 08 09 0A 0B OC OD OE OF 10 11 12 13 14 */  
339 -- /* 00 */ 0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x0c,0x00,0x0f,0x08,0x00,  
340 -- /* 01 */ 0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x01,0x00,0x03,0x00,0x00,  
341 -- /* 02 */ 0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x01,0x00,0x01,0x00,0x00,  
342 -- /* 03 */ 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0e,0x00,0x0f,0x08,0x00,  
343 -- /* 04 */ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x01,0x00,0x0f,0x00,0x00,  
344 -- /* 05 */ 0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,0x01,0x00,0x01,0x00,0x00,  
345 -- /* 06 */ 0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x01,0x00,0x0f,0x00,0x00,  
346 -- /* 07 */ 0x00,0x3f,0x00,0x3f,0x00,0x3f,0x00,0x3f,0x00,0x3f,0x00,0x3f,0x00,0x3f,0x00,0x3f,0x01,0x00,0x0f,0x00,0x00,  
347 -- /* 08 */ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x41,0x00,0x0f,0x00,0x00  
348 --};  
349 --  
350 --/* Sequencer 0x3c4 */  
351 --#define SEQU_MAX_REG 0x04  
352 --#define SEQU_MAX_MODEL 0x06  
353 --  
354 --static Bit8u sequ_access[SEQU_MAX_REG+1]=  
355 --{ /* 00 01 02 03 04 */  
356 -- 0x00,0x00,0x00,0x00,0x00  
357 --};  
358 --  
359 --static Bit8u sequ_regs[SEQU_MAX_MODEL+1][SEQU_MAX_REG+1]=  
360 --{/* Model 00 01 02 03 04 */  
361 -- /* 00 */ 0x03,0x08,0x03,0x00,0x02,  
362 -- /* 01 */ 0x03,0x00,0x03,0x00,0x02,  
363 -- /* 02 */ 0x03,0x09,0x03,0x00,0x02,  
364 -- /* 03 */ 0x03,0x01,0x01,0x00,0x06,  
365 -- /* 04 */ 0x03,0x09,0x0f,0x00,0x06,  
366 -- /* 05 */ 0x03,0x01,0x0f,0x00,0x06,  
367 -- /* 06 */ 0x03,0x01,0x0f,0x00,0x0e  
368 --};  
369 --  
370 --/* Graphic ctl 0x3ce */  
371 --#define GRDC_MAX_REG 0x08  
372 --#define GRDC_MAX_MODEL 0x05  
373 --  
374 --static Bit8u grdc_access[GRDC_MAX_REG+1]=  
375 --{ /* 00 01 02 03 04 05 06 07 08 */  
376 -- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  
377 --};  
378 --  
379 --static Bit8u grdc_regs[GRDC_MAX_MODEL+1][GRDC_MAX_REG+1]=  
380 --{/* Model 00 01 02 03 04 05 06 07 08 */  
381 -- /* 00 */ 0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x0f,0xff,  
382 -- /* 01 */ 0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x0f,0xff,  
383 -- /* 02 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0f,0xff,  
384 -- /* 03 */ 0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x0f,0xff,  
385 -- /* 04 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,0xff,  
386 -- /* 05 */ 0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,0xff  
387 -+{//mode class model bits sstart pelm dac  
388 -+ {0x00, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},  
389 -+ {0x01, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},  
390 -+ {0x02, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},  
391 -+ {0x03, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},  
392 -+ {0x04, GRAPH, CGA, 2, 0xB800, 0xFF, 0x01},  
393 -+ {0x05, GRAPH, CGA, 2, 0xB800, 0xFF, 0x01},  
394 -+ {0x06, GRAPH, CGA, 1, 0xB800, 0xFF, 0x01},  
395 -+ {0x07, TEXT, MTEXT, 4, 0xB000, 0xFF, 0x00},  
396 -+ {0x0D, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},  
397 -+ {0x0E, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},  
398 -+ {0x0F, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x00},  
399 -+ {0x10, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},  
400 -+ {0x11, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x02},  
401 -+ {0x12, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},  
402 -+ {0x13, GRAPH, LINEAR8, 8, 0xA000, 0xFF, 0x03},  
403 -+ {0x6A, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02}  
404 -+}; 40 ++cirrus_clear_vram:
  41 ++ pusha
  42 ++ push es
  43 ++ mov si, ax
405 + 44 +
406 -+/* convert index in vga_modes[] to index in video_param_table[] */  
407 -+static Bit8u line_to_vpti[MODE_MAX+1]={  
408 -+ 0x17, 0x17, 0x18, 0x18, 0x04, 0x05, 0x06, 0x07,  
409 -+ 0x0d, 0x0e, 0x11, 0x12, 0x1a, 0x1b, 0x1c, 0x1d,  
410 - };  
411 -  
412 - /* Default Palette */  
413 -@@ -224,6 +136,398 @@  
414 - static Bit8u dac_regs[DAC_MAX_MODEL+1]=  
415 - {0x3f,0x3f,0x3f,0xff};  
416 -  
417 -+/* standard BIOS Video Parameter Table */  
418 -+typedef struct {  
419 -+ Bit8u twidth;  
420 -+ Bit8u theightm1;  
421 -+ Bit8u cheight;  
422 -+ Bit8u slength_l;  
423 -+ Bit8u slength_h;  
424 -+ Bit8u sequ_regs[4];  
425 -+ Bit8u miscreg;  
426 -+ Bit8u crtc_regs[25];  
427 -+ Bit8u actl_regs[20];  
428 -+ Bit8u grdc_regs[9];  
429 -+} VideoParamTableEntry; 45 ++ call cirrus_enable_16k_granularity
  46 ++ call cirrus_extbios_85h
  47 ++ shl al, #2
  48 ++ mov bl, al
  49 ++ xor ah,ah
  50 ++cirrus_clear_vram_1:
  51 ++ mov al, #0x09
  52 ++ mov dx, #0x3ce
  53 ++ out dx, ax
  54 ++ push ax
  55 ++ mov cx, #0xa000
  56 ++ mov es, cx
  57 ++ xor di, di
  58 ++ mov ax, si
  59 ++ mov cx, #8192
  60 ++ cld
  61 ++ rep
  62 ++ stosw
  63 ++ pop ax
  64 ++ inc ah
  65 ++ cmp ah, bl
  66 ++ jne cirrus_clear_vram_1
430 + 67 +
431 -+static VideoParamTableEntry video_param_table[30] = {  
432 -+{  
433 -+ /* index=0x00 no mode defined */  
434 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
435 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
436 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
437 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
438 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
439 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
440 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
441 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
442 -+},  
443 -+{  
444 -+ /* index=0x01 no mode defined */  
445 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
446 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
447 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
448 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
449 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
450 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
451 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
452 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
453 -+},  
454 -+{  
455 -+ /* index=0x02 no mode defined */  
456 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
457 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
458 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
459 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
460 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
461 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
462 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
463 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
464 -+},  
465 -+{  
466 -+ /* index=0x03 no mode defined */  
467 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
468 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
469 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
470 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
471 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
472 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
473 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
474 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
475 -+},  
476 -+{  
477 -+ /* index=0x04 vga mode 0x04 */  
478 -+ 40, 24, 8, 0x00, 0x08, /* tw, th-1, ch, slength */  
479 -+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */  
480 -+ 0x63, /* miscreg */  
481 -+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,  
482 -+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
483 -+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,  
484 -+ 0xff, /* crtc_regs */  
485 -+ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,  
486 -+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,  
487 -+ 0x01, 0x00, 0x03, 0x00, /* actl_regs */  
488 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */  
489 -+},  
490 -+{  
491 -+ /* index=0x05 vga mode 0x05 */  
492 -+ 40, 24, 8, 0x00, 0x08, /* tw, th-1, ch, slength */  
493 -+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */  
494 -+ 0x63, /* miscreg */  
495 -+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,  
496 -+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
497 -+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,  
498 -+ 0xff, /* crtc_regs */  
499 -+ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,  
500 -+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,  
501 -+ 0x01, 0x00, 0x03, 0x00, /* actl_regs */  
502 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */  
503 -+},  
504 -+{  
505 -+ /* index=0x06 vga mode 0x06 */  
506 -+ 80, 24, 8, 0x00, 0x10, /* tw, th-1, ch, slength */  
507 -+ 0x01, 0x01, 0x00, 0x06, /* sequ_regs */  
508 -+ 0x63, /* miscreg */  
509 -+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,  
510 -+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
511 -+ 0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xc2,  
512 -+ 0xff, /* crtc_regs */  
513 -+ 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,  
514 -+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,  
515 -+ 0x01, 0x00, 0x01, 0x00, /* actl_regs */  
516 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0f, 0xff, /* grdc_regs */  
517 -+},  
518 -+{  
519 -+ /* index=0x07 vga mode 0x07 */  
520 -+ 80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */  
521 -+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */  
522 -+ 0x66, /* miscreg */  
523 -+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,  
524 -+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,  
525 -+ 0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,  
526 -+ 0xff, /* crtc_regs */  
527 -+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,  
528 -+ 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,  
529 -+ 0x0e, 0x00, 0x0f, 0x08, /* actl_regs */  
530 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff, /* grdc_regs */  
531 -+},  
532 -+{  
533 -+ /* index=0x08 no mode defined */  
534 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
535 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
536 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
537 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
538 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
539 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
540 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
541 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
542 -+},  
543 -+{  
544 -+ /* index=0x09 no mode defined */  
545 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
546 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
547 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
548 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
549 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
550 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
551 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
552 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
553 -+},  
554 -+{  
555 -+ /* index=0x0a no mode defined */  
556 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
557 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
558 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
559 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
560 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
561 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
562 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
563 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
564 -+},  
565 -+{  
566 -+ /* index=0x0b no mode defined */  
567 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
568 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
569 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
570 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
571 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
572 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
573 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
574 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
575 -+},  
576 -+{  
577 -+ /* index=0x0c no mode defined */  
578 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
579 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
580 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
581 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
582 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
583 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
584 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
585 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
586 -+},  
587 -+{  
588 -+ /* index=0x0d vga mode 0x0d */  
589 -+ 40, 24, 8, 0x00, 0x20, /* tw, th-1, ch, slength */  
590 -+ 0x09, 0x0f, 0x00, 0x06, /* sequ_regs */  
591 -+ 0x63, /* miscreg */  
592 -+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,  
593 -+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
594 -+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xe3,  
595 -+ 0xff, /* crtc_regs */  
596 -+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,  
597 -+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,  
598 -+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */  
599 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */  
600 -+},  
601 -+{  
602 -+ /* index=0x0e vga mode 0x0e */  
603 -+ 80, 24, 8, 0x00, 0x40, /* tw, th-1, ch, slength */  
604 -+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */  
605 -+ 0x63, /* miscreg */  
606 -+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,  
607 -+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
608 -+ 0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xe3,  
609 -+ 0xff, /* crtc_regs */  
610 -+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,  
611 -+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,  
612 -+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */  
613 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */  
614 -+},  
615 -+{  
616 -+ /* index=0x0f no mode defined */  
617 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
618 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
619 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
620 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
621 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
622 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
623 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
624 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
625 -+},  
626 -+{  
627 -+ /* index=0x10 no mode defined */  
628 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
629 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
630 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
631 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
632 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
633 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
634 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
635 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
636 -+},  
637 -+{  
638 -+ /* index=0x11 vga mode 0x0f */  
639 -+ 80, 24, 14, 0x00, 0x80, /* tw, th-1, ch, slength */  
640 -+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */  
641 -+ 0xa3, /* miscreg */  
642 -+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,  
643 -+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
644 -+ 0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,  
645 -+ 0xff, /* crtc_regs */  
646 -+ 0x00, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,  
647 -+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,  
648 -+ 0x01, 0x00, 0x01, 0x00, /* actl_regs */  
649 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */  
650 -+},  
651 -+{  
652 -+ /* index=0x12 vga mode 0x10 */  
653 -+ 80, 24, 14, 0x00, 0x80, /* tw, th-1, ch, slength */  
654 -+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */  
655 -+ 0xa3, /* miscreg */  
656 -+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,  
657 -+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
658 -+ 0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,  
659 -+ 0xff, /* crtc_regs */  
660 -+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,  
661 -+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,  
662 -+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */  
663 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */  
664 -+},  
665 -+{  
666 -+ /* index=0x13 no mode defined */  
667 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
668 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
669 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
670 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
671 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
672 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
673 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
674 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
675 -+},  
676 -+{  
677 -+ /* index=0x14 no mode defined */  
678 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
679 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
680 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
681 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
682 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
683 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
684 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
685 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
686 -+},  
687 -+{  
688 -+ /* index=0x15 no mode defined */  
689 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
690 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
691 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
692 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
693 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
694 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
695 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
696 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
697 -+},  
698 -+{  
699 -+ /* index=0x16 no mode defined */  
700 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
701 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
702 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
703 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
704 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
705 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
706 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
707 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
708 -+},  
709 -+{  
710 -+ /* index=0x17 vga mode 0x01 */  
711 -+ 40, 24, 16, 0x00, 0x08, /* tw, th-1, ch, slength */  
712 -+ 0x08, 0x03, 0x00, 0x02, /* sequ_regs */  
713 -+ 0x67, /* miscreg */  
714 -+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,  
715 -+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,  
716 -+ 0x9c, 0x8e, 0x8f, 0x14, 0x1f, 0x96, 0xb9, 0xa3,  
717 -+ 0xff, /* crtc_regs */  
718 -+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,  
719 -+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,  
720 -+ 0x0c, 0x00, 0x0f, 0x08, /* actl_regs */  
721 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */  
722 -+},  
723 -+{  
724 -+ /* index=0x18 vga mode 0x03 */  
725 -+ 80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */  
726 -+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */  
727 -+ 0x67, /* miscreg */  
728 -+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,  
729 -+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,  
730 -+ 0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,  
731 -+ 0xff, /* crtc_regs */  
732 -+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,  
733 -+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,  
734 -+ 0x0c, 0x00, 0x0f, 0x08, /* actl_regs */  
735 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */  
736 -+},  
737 -+{  
738 -+ /* index=0x19 vga mode 0x07 */  
739 -+ 80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */  
740 -+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */  
741 -+ 0x66, /* miscreg */  
742 -+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,  
743 -+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,  
744 -+ 0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,  
745 -+ 0xff, /* crtc_regs */  
746 -+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,  
747 -+ 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,  
748 -+ 0x0e, 0x00, 0x0f, 0x08, /* actl_regs */  
749 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff, /* grdc_regs */  
750 -+},  
751 -+{  
752 -+ /* index=0x1a vga mode 0x11 */  
753 -+ 80, 29, 16, 0x00, 0x00, /* tw, th-1, ch, slength */  
754 -+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */  
755 -+ 0xe3, /* miscreg */  
756 -+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,  
757 -+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
758 -+ 0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,  
759 -+ 0xff, /* crtc_regs */  
760 -+ 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,  
761 -+ 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,  
762 -+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */  
763 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */  
764 -+},  
765 -+{  
766 -+ /* index=0x1b vga mode 0x12 */  
767 -+ 80, 29, 16, 0x00, 0x00, /* tw, th-1, ch, slength */  
768 -+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */  
769 -+ 0xe3, /* miscreg */  
770 -+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,  
771 -+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
772 -+ 0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,  
773 -+ 0xff, /* crtc_regs */  
774 -+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,  
775 -+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,  
776 -+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */  
777 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */  
778 -+},  
779 -+{  
780 -+ /* index=0x1c vga mode 0x13 */  
781 -+ 40, 24, 8, 0x00, 0x00, /* tw, th-1, ch, slength */  
782 -+ 0x01, 0x0f, 0x00, 0x0e, /* sequ_regs */  
783 -+ 0x63, /* miscreg */  
784 -+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,  
785 -+ 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
786 -+ 0x9c, 0x8e, 0x8f, 0x28, 0x40, 0x96, 0xb9, 0xa3,  
787 -+ 0xff, /* crtc_regs */  
788 -+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,  
789 -+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  
790 -+ 0x41, 0x00, 0x0f, 0x00, /* actl_regs */  
791 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff, /* grdc_regs */  
792 -+},  
793 -+{  
794 -+ /* index=0x1d vga mode 0x6a */  
795 -+ 100, 36, 16, 0x00, 0x00, /* tw, th-1, ch, slength */  
796 -+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */  
797 -+ 0xe3, /* miscreg */  
798 -+ 0x7f, 0x63, 0x63, 0x83, 0x6b, 0x1b, 0x72, 0xf0,  
799 -+ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
800 -+ 0x59, 0x8d, 0x57, 0x32, 0x00, 0x57, 0x73, 0xe3,  
801 -+ 0xff, /* crtc_regs */  
802 -+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,  
803 -+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,  
804 -+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */  
805 -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */  
806 -+},  
807 -+}; 68 ++ pop es
  69 ++ popa
  70 ++ ret
808 + 71 +
809 - /* Mono */  
810 - static Bit8u palette0[63+1][3]=  
811 - { 72 + cirrus_extbios_handlers:
  73 + ;; 80h
  74 + dw cirrus_extbios_80h