Return to BSD News archive
Xref: sserve comp.windows.x.i386unix:1156 comp.os.386bsd.apps:143
Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!saimiri.primate.wisc.edu!caen!nigel.msen.com!math.fu-berlin.de!irz401!sax!not-for-mail
From: joerg@sax.sax.de (Joerg Wunsch)
Newsgroups: comp.windows.x.i386unix,comp.os.386bsd.apps
Subject: XFree86 ``downgraded'' to Trident 8800
Followup-To: comp.windows.x.i386unix
Date: 13 Apr 1993 18:20:59 +0200
Organization: SaxNet, Dresden, Germany
Lines: 190
Distribution: world
Message-ID: <1qep9b$9t8@sax.sax.de>
NNTP-Posting-Host: sax.sax.de
Summary: XFree86 Trident driver has been adapted to TVGA 8800
Hi all,
since i have been too unpacient to wait starting XFree86 experiments
till i've bought a better video board, i've ``downgraded'' the existing
Trident driver to support the 8800 chipset. Of course, this is a crock.
It's slow and uncomfortable. But maybe, there are further people who
just wanna play with XFree86 and happen to have this card, so it makes
sense. I've gotta board with 512 K RAM and 3 clocks (25.2, 28.3, 40 MHz),
the chipset is a TVGA 8800 CS (someone noted the `CS' might be important).
I've been testing this along with a 386BSD, either with the stock pccons
driver, and with a (patched) pcvt driver.
I've been using much of the existing Trident code. Obviously, most of
the strategies are consistent with newer boards. Unfortunately, it app-
ears that in 256-color mode, the dot clock is halved (for RAM timing
reasons, i guess), so the scan rates are very slow (but this complies
with 640*{400,480} DOS modi for that card). To get a 60 Hz vertical rate,
only about 640 * 400 are applicable, and the monitor must sync down to
about 25 kHz horizontally. Virtual resolution of 800 * 600 works fine.
In monochrome mode, the situation is better. Up to 40 MHz dot clock
may be used, so one might take 640 * 480 at 67 Hz scan (using the 28 MHz
crystal), or 800 * 600 with 60 Hz scan (but near 40 kHz horizontally).
Virtual resolution here reaches to 1100 * 825.
Sorry, i've forgotten to append my Xconfig examples. If someone's inter-
ested, mail me to <joerg_wunsch@uriah.sax.de>.
The diff's below relate to .../mit/server/ddx/x386/vga256/trident/driver.c,
of the patched distribution patched to XFree86-1.2; since i ain't use
the server linkkit, i can't tell what to do to include it into the linkkit.
Sorry. But hopefully, a XFree wizard could include it if considered useful.
If requested, i were willing to put the driver.o files somewhere to a
publically accessible server.
all the best
J"org <joerg_wunsch@uriah.sax.de>
*** driver.c.orig Wed Mar 31 00:11:18 1993
--- driver.c Tue Apr 13 09:18:45 1993
***************
*** 110,118 ****
int n;
{
#ifdef MONOVGA
! static char *chipsets[] = {"tvga8900c", "tvga9000", "tvga8900b"};
#else
! static char *chipsets[] = {"tvga8900c", "tvga9000"};
#endif
if (n + 1 > sizeof(chipsets) / sizeof(char *))
--- 110,118 ----
int n;
{
#ifdef MONOVGA
! static char *chipsets[] = {"tvga8900c", "tvga9000", "tvga8900b", "tvga8800"};
#else
! static char *chipsets[] = {"tvga8900c", "tvga9000", "tvga8800"};
#endif
if (n + 1 > sizeof(chipsets) / sizeof(char *))
***************
*** 183,188 ****
--- 183,193 ----
#ifdef MONOVGA
else if (!strcmp(vga256InfoRec.chipset, TVGA8900Ident(2)))
TVGAchipset = TVGA8900B;
+ else if (!strcmp(vga256InfoRec.chipset, TVGA8900Ident(3)))
+ TVGAchipset = TVGA8800;
+ #else
+ else if (!strcmp(vga256InfoRec.chipset, TVGA8900Ident(2)))
+ TVGAchipset = TVGA8800;
#endif
else
return(FALSE);
***************
*** 245,251 ****
if ((TVGAchipset != TVGA8900C1)
&& (TVGAchipset != TVGA8900C2)
&& (TVGAchipset != TVGA9000)
! && (TVGAchipset != TVGA8900B))
{
TVGA8900EnterLeave(LEAVE);
return(FALSE);
--- 250,257 ----
if ((TVGAchipset != TVGA8900C1)
&& (TVGAchipset != TVGA8900C2)
&& (TVGAchipset != TVGA9000)
! && (TVGAchipset != TVGA8900B)
! && (TVGAchipset != TVGA8800))
{
TVGA8900EnterLeave(LEAVE);
return(FALSE);
***************
*** 253,262 ****
#else
if ((TVGAchipset != TVGA8900C1)
&& (TVGAchipset != TVGA8900C2)
! && (TVGAchipset != TVGA9000))
{
ErrorF(
! "%s: Trident driver only supports TVGA8900C/9000\n",
vga256InfoRec.name);
TVGA8900EnterLeave(LEAVE);
return(FALSE);
--- 259,269 ----
#else
if ((TVGAchipset != TVGA8900C1)
&& (TVGAchipset != TVGA8900C2)
! && (TVGAchipset != TVGA9000)
! && (TVGAchipset != TVGA8800))
{
ErrorF(
! "%s: Trident driver only supports TVGA8800/8900C/9000\n",
vga256InfoRec.name);
TVGA8900EnterLeave(LEAVE);
return(FALSE);
***************
*** 286,296 ****
vga256InfoRec.bankedMono = TRUE;
vga256InfoRec.chipset = TVGA8900Ident(1);
break;
}
/*
* TVGA8900C supports 8 clocks, TVGA9000 supports 16 clocks
*/
! numClocks = (TVGAchipset == TVGA9000) ? 16 : 8;
/*
* How much Video Ram have we got?
--- 293,313 ----
vga256InfoRec.bankedMono = TRUE;
vga256InfoRec.chipset = TVGA8900Ident(1);
break;
+ case TVGA8800:
+ vga256InfoRec.bankedMono = TRUE;
+ #ifdef MONOVGA
+ vga256InfoRec.chipset = TVGA8900Ident(3);
+ #else
+ vga256InfoRec.chipset = TVGA8900Ident(2);
+ #endif
+ break;
}
/*
* TVGA8900C supports 8 clocks, TVGA9000 supports 16 clocks
+ * TVGA8800 supports 4 (?) clocks
*/
! numClocks = (TVGAchipset == TVGA9000) ? 16 :
! (TVGAchipset == TVGA8800? 4: 8);
/*
* How much Video Ram have we got?
***************
*** 500,506 ****
DisplayModePtr mode;
{
#ifndef MONOVGA
! if ( TVGAchipset == TVGA9000 ) {
/*
* Initialize generic VGA Registers
*/
--- 517,523 ----
DisplayModePtr mode;
{
#ifndef MONOVGA
! if ( TVGAchipset == TVGA9000 || TVGAchipset == TVGA8800 ) {
/*
* Initialize generic VGA Registers
*/
***************
*** 573,579 ****
int base;
#ifndef MONOVGA
! if (TVGAchipset == TVGA9000)
base = (y * vga256InfoRec.virtualX + x) >> 2;
else
#endif
--- 590,596 ----
int base;
#ifndef MONOVGA
! if (TVGAchipset == TVGA9000 || TVGAchipset == TVGA8800)
base = (y * vga256InfoRec.virtualX + x) >> 2;
else
#endif
--
J"org Wunsch, ham: dl8dtl : joerg_wunsch@uriah.sax.de
If anything can go wrong... : ...or:
.o .o : joerg@sax.de,wutcd@hadrian.hrz.tu-chemnitz.de,
<_ ... IT WILL! : joerg_wunsch@tcd-dresden.de