*BSD News Article 6819


Return to BSD News archive

Xref: sserve comp.unix.bsd:6868 comp.unix.sysv386:24944 comp.os.linux:13235
Path: sserve!manuel.anu.edu.au!munnari.oz.au!uunet!noc.near.net!hri.com!spool.mu.edu!caen!zaphod.mps.ohio-state.edu!swrinde!gatech!prism!gg10
From: gg10@prism.gatech.EDU (GALLOWAY)
Newsgroups: comp.unix.bsd,comp.unix.sysv386,comp.os.linux
Subject: Summary: X386 and Diamond Speedstar/Gateway CS1024ni
Message-ID: <71948@hydra.gatech.EDU>
Date: 20 Oct 92 22:26:33 GMT
Followup-To: comp.unix.bsd
Organization: Georgia Institute of Technology
Lines: 200


First, thanks to all who responded to my desperate cry for help.

I was amazed to find that at least 5 people claimed to have the same
hardware setup as mine, but all had completely different Xconfig files.
Only one of these worked for me.  Each person had completely different
dot clocks.

I calculated my own horz and vert timings with no trouble but still could
not get them to work.  After some experimentation, I found at why...

Out of the 8 clocks shown in my Xconfig below, only three are really used:

  25 50 65

But my system will not work with this line in my Xconfig:

  Clocks 25 50 65

but it will work with:

  Clocks 25 0 0 0 0 0 50 65

It seems as though the position of each dot clock is significant.  Any dot
clocks which are not used can be safely set to zero.

Now I have a friend with a 486/33 with a local bus ET4000 display card.  My
Xconfig will not work for him.  So we started with the following:

  Clocks 25 50

and then:

  Clocks 25 0 50

and so on ... until we finally got 800x600 mode to work with:

  Clocks 25 0 0 0 50

Then we started trying 1024x768:

  Clocks 25 65 0 0 50

and finally got it working with:

  Clocks 25 0 0 0 50 0 0 0 0 65

Now this will not work for everyone.  First of all you have to know which
dot clocks are used for each mode for your card.  We found this out using
a program which came with his card.

Second you have to know the horizontal sync frequency and vertical refresh
rate for your display.  The program "vmode" which came with my card told
me these.

The values for my system are:

  Mode      Dot clock    Horz sync freq   Vert refresh
  640x480   25Mhz        31.5khz          60hz
  800x600   50Mhz        48.1khz          72hz
  1024x768  65Mhz        48.9khz          60hz

Below is an example of how I calculated my 640x480 timings.  Other modes
are similar.

1) Determine number of dots per line

  dots_per_line = dot_clock / horz_sync_freq
                = 25000 / 31.5
                = 793.65 (round up to the nearest multiple of 8)
                = 800

2) Determine number of microseconds per dot

  us_per_dot = 1 / dot_clock
             = 1 / 25 = 0.04

3) Determine dots per horizontal sync pulse (or width of pulse in dots)

  From Chin Fang's configuration tutorial in file CONFIG we have that the
  hsync with is about 3.5 to 4.0 microseconds.  We'll use 3.8us below:

  dots_per_hsync = us_per_hsync / us_per_dot
                 = 3.8 / 0.04
                 = 95 (round up to a multiple of 8)
                 = 96

4) Determine horizontal timings

We have 800 total dots, 640 visible, and 96 for the hsync pulse leaving 64.

  800 - 640 - 96 = 64

We'll put half of these before the pulse and half after (see Fang's CONFIG)
which gives us:

  640 (640+32) (640+32+96) 800

5) Determine number of microseconds per line

  us_per_line = dots_per_line / us_per_dot
              = 800 / 0.04
              = 32

6) Determine lines per vertical sync pulse

  lines_per_vsync = us_per_vsync / us_per_line
                  = 150 / 32
                  = 4.6875 (round up)
                  = 5

7) Determine number of microseconds per frame

  s_per_frame = 1 / frames_per_sec
              = 1 / 60
              = 0.0167

  us_per_frame = 1000000 * s_per_frame
               = 16667

8) Determine number of lines per frame

  lines_per_frame = us_per_frame / us_per_line
                  = 16667 / 32
                  = 520.83 (truncate or round)
                  = 520

9) Determine our vertical timing

We have 520 total lines, 580 visible, and 5 for the vsync pulse leaving 35.

  520 - 480 - 5 = 35

We'll put ten of these before the pulse and the rest after (see Fang's CONFIG)
which gives us:

  480 (480+10) (480+10+5) 520

10) So now our timing line looks like:

"640x480"   25   640 (640+32) (640+32+96) 800   480 (480+10) (480+10+5) 520

  or

"640x480"   25   640 672 768 800   480 490 495 520

Hope this helps...

Greg Galloway
gg10@prism.gatech.edu

-------------------------------------------------------------------------------

# Xconfig

RGBPath		"/usr/lib/X11/rgb"
#FontPath	"/usr/lib/X11/fonts/misc/,/usr/lib/X11/fonts/75dpi/"
FontPath	"/usr/lib/X11/fonts/misc/"

Keyboard
  AutoRepeat 500 5
  Xleds      1 2 3
  ServerNumLock
#  DontZap

Microsoft	"/dev/ttys1"
#MouseSystems	"/dev/ttys2"
#MMSeries	"/dev/ttys2"
#Logitech	"/dev/ttys1"
#MouseMan	"/dev/ttys2"
#Busmouse	"/dev/ttys2"
#  BaudRate	1200
#  SampleRate	150
  Emulate3Buttons

vga256
  Chipset	"et4000"
  #Chipset	"et3000"
  #Chipset	"gvga"
  #Chipset	"pvga1"
  Vendor	"diamond"
  Clocks        25  0  0  0  0  0  50 65
  Virtual	1024 1024
  ViewPort      0 0
  Modes	        "640x480" "800x600" "1024x768"
  #Displaysize	1024 768
  #Staticgray
  #Grayscale
  #Staticcolor
  #Pseudocolor
  #Truecolor
  #Directcolor
  #Screenno	0
  Videoram	1024

ModeDB
# name       clock  horzontal timing      vertical timing      flags
"640x480"    25     640  672  768  800    480  490  495  520
"800x600"    50     800  864  970  1056   600  608  615  633
"1024x768"   65     1024 1119 1303 1360   768  771  779  806