diff -u clean/xc/programs/Xserver/hw/xfree86/vga256/drivers/s3v/s3v_driver.h xc/programs/Xserver/hw/xfree86/vga256/drivers/s3v/s3v_driver.h --- clean/xc/programs/Xserver/hw/xfree86/vga256/drivers/s3v/s3v_driver.h Tue Jan 11 20:01:01 2000 +++ xc/programs/Xserver/hw/xfree86/vga256/drivers/s3v/s3v_driver.h Mon Mar 13 16:56:47 2000 @@ -19,7 +19,7 @@ unsigned char CR40, CR41, CR42, CR43, CR45; unsigned char CR51, CR53, CR54, CR55, CR58, CR5D, CR5E; unsigned char CR63, CR65, CR66, CR67, CR68, CR69, CR6D; /* Video attrib. */ - unsigned char CR86; + unsigned char CR85, CR86; unsigned char CR90, CR91; unsigned char ColorStack[8]; /* S3 hw cursor color stack CR4A/CR4B */ unsigned int STREAMS[22]; /* Streams regs */ diff -u clean/xc/programs/Xserver/hw/xfree86/vga256/drivers/s3v/s3v_driver.c xc/programs/Xserver/hw/xfree86/vga256/drivers/s3v/s3v_driver.c --- clean/xc/programs/Xserver/hw/xfree86/vga256/drivers/s3v/s3v_driver.c Tue Jan 11 20:01:01 2000 +++ xc/programs/Xserver/hw/xfree86/vga256/drivers/s3v/s3v_driver.c Tue Mar 14 01:05:09 2000 @@ -471,6 +471,10 @@ outb(vgaCRIndex, 0x33); outb(vgaCRReg, restore->CR33); + if (S3_TRIO_3D_2X_SERIES(s3vPriv.chip)) { + outb(vgaCRIndex, 0x85); + outb(vgaCRReg, restore->CR85); + } if (s3vPriv.chip == S3_ViRGE_DXGX) { outb(vgaCRIndex, 0x86); outb(vgaCRReg, restore->CR86); @@ -702,6 +706,10 @@ outb(vgaCRIndex, 0x33); save->CR33 = inb(vgaCRReg); + if (S3_TRIO_3D_2X_SERIES(s3vPriv.chip)) { + outb(vgaCRIndex, 0x85); + save->CR85 = inb(vgaCRReg); + } if (s3vPriv.chip == S3_ViRGE_DXGX) { outb(vgaCRIndex, 0x86); save->CR86 = inb(vgaCRReg); @@ -970,10 +978,12 @@ } else if (S3_TRIO_3D_2X_SERIES(s3vPriv.chip)) { switch((config1 & 0xE0) >> 5) { - case 0: - vga256InfoRec.videoRam = 8 * 1024; + case 0: /* 8MB -- only 4MB usable for display/cursor */ + vga256InfoRec.videoRam = 4 * 1024; + s3vPriv.MemOffScreen = 4 * 1024; break; case 1: /* 32 bit interface -- yuck */ + ErrorF("%s %s: found 32 bit interface for video memory -- yuck:(\n"); case 2: vga256InfoRec.videoRam = 4 * 1024; break; @@ -1071,6 +1081,12 @@ if (vga256InfoRec.dacSpeeds[2] <= 0) vga256InfoRec.dacSpeeds[2] = 135000; if (vga256InfoRec.dacSpeeds[3] <= 0) vga256InfoRec.dacSpeeds[3] = 135000; } + else if (S3_TRIO_3D_2X_SERIES(s3vPriv.chip)) { + if (vga256InfoRec.dacSpeeds[0] <= 0) vga256InfoRec.dacSpeeds[0] = 230000; + if (vga256InfoRec.dacSpeeds[1] <= 0) vga256InfoRec.dacSpeeds[1] = 230000; + if (vga256InfoRec.dacSpeeds[2] <= 0) vga256InfoRec.dacSpeeds[2] = 135000; + if (vga256InfoRec.dacSpeeds[3] <= 0) vga256InfoRec.dacSpeeds[3] = 135000; + } else if (s3vPriv.chip == S3_ViRGE_DXGX || S3_ViRGE_GX2_SERIES(s3vPriv.chip)) { if (vga256InfoRec.dacSpeeds[0] <= 0) vga256InfoRec.dacSpeeds[0] = 170000; if (vga256InfoRec.dacSpeeds[1] <= 0) vga256InfoRec.dacSpeeds[1] = 170000; @@ -1874,6 +1890,9 @@ new->CR33 = 0x20; if ((s3vPriv.chip == S3_ViRGE_DXGX) || (S3_TRIO_3D_SERIES(s3vPriv.chip))) { new->CR86 = 0x80; /* disable DAC power saving to avoid bright left edge */ + } + if (S3_TRIO_3D_2X_SERIES(s3vPriv.chip)) { + new->CR85 = 0x1f; /* avoid sreen flickering */ } if (s3vPriv.chip == S3_ViRGE_DXGX || S3_ViRGE_GX2_SERIES(s3vPriv.chip) || S3_ViRGE_MX_SERIES(s3vPriv.chip) || S3_TRIO_3D_SERIES(s3vPriv.chip)) {