From: jonas@sisu.se (Jonas Lagerblad)
Subject: Re: help: Xconfig for Xfree86
Organization: Swedish Institute of Systems Development
Date: Mon, 5 Oct 1992 13:54:55 GMT

In article <1992Oct5.025342.22047@umr.edu> jlu@cs.umr.edu ( Eric Jui-Lin Lu ) writes:
>Greetings *,
>
>I have asked for help last Friday.  Since I got no response so far,
>I think I better asking for help again.  I have problem to start up
>X in 386bsd 0.1.  I believe it's caused by Xconfig.  I have followed
...
>
>What I have in my Xconfig:
>
>vga256
>chipset "et4000"
>virtual 1152 900
>viewport 0 0
>[NOTE: I don't have clocks setting since I don't know how to do it.]
>Modes "800x600" "640x480"
>
>VGA card: VGA MENTOR (based on Tseng's ET4000 Turbo MegaVGA Chip and BIOS)
>          a little tin can shows 50.000 MHz
>          (I assumed it's 50MHz)
This is probably not correct (it is 50Mhz) this oscillator isn't the clock
used to generate the Video signal. The simplest method to get the clocks
supported by your et4000 chip is to run xinit, and save the output to a file.
for example:

    % xinit >& File
    ... (kill X or something)
    % cat File
    X386 Version 1.2E 1.0.2a  / X Window System
    (protocol Version 11, revision 0, vendor release 5000)
    VGA256: et4000 (mem: 1024k numclocks: 16)
    VGA256:   clocks: 25 28 33 37 40 45 51 66  0 57 65 73 80 90 102 131
    VGA256: SpeedUp mode selected (Flags=0x1f)

And here you get the clocks available in your card on the clocks line.
>Monitor:  NEC 2A  (max. 800x600)
>          Horizontal frequencies: 31.5 and 35 (or 35.2?) KHz.
>          Vertical   frequencies: 56, 60, and 70 Hz.
>
>Help me!  Somebody.......
Here is a simple program to generate mode lines, which I wrote, feel
free to use it at your own risk (send any bug fixes and improvements
to me (jonas@sisu.se), support for interlaced mode needed).

Regards 
Jonas Lagerblad
------------- xconf.c -----------------
/*
 * Xconf.c: Simple program to generate mode lines for Xfree86.
 *
 * compile: cc -o xconf xconf.c
 *
 * Usage: xconf Xres Yres (e.g xconf 1024 768)
 *
 * Customize the variables below to suit your VGA card and monitor.
 */
/* Copyright 1992, Jonas Lagerblad (jonas@sisu.se) */

/* Clock frequencies supported by VGA card (MHz) */
int vga_rates[] = {25, 28, 33, 37, 40, 45, 51, 65, 57, 73, 80, 90, 102, 131, 0};
/* horizontal frequences supported by your Monitor (Hz) */
int mon_rates[] = {31500, 35500, 48000, 64000, 0};

/* Vertical frequency limits for monitor (Hz) */
int MIN_VFREQ	= 50;
int MAX_VFREQ	= 120;

/* Vertical and horizontal sync times (s) */
double VSYNC	 = 0.000300;
double SYNC	 = 0.0000038;

main(argc,argv)
char ** argv;
{
    double freq, tmp, sec_per_line, vfreq;
    register int dots_per_line, dots_per_sync, lines_per_hsync, lines, diff, j, i, xres, yres, ydiff;

    if (argc != 3) {
	printf("usage: %s xres yres\n", argv[0]);
	exit(1);
    }
    
    xres = atoi(argv[1]);
    yres = atoi(argv[2]);
    if (!xres || !yres) {
	printf("Zero resolution not supported\n");
	exit(1);
    }

    printf("\"%dx%d\"\n", xres, yres);

    for (j=0; mon_rates[j]; j++) {
	printf("# With monitor rate %d\n", mon_rates[j]);
	for (i=0; vga_rates[i]; i++) {
	    freq = vga_rates[i] * 1000000.;
	    dots_per_line = (double)freq / (double) mon_rates[j];
	    dots_per_line >>= 3;
	    dots_per_line <<= 3;
	    sec_per_line = dots_per_line / freq;
	    /* dots per sync is frequency * sync time rounded up 
	     * to be divisible by 8 */
	    dots_per_sync = (double) freq * SYNC + (double) 7;
	    dots_per_sync >>= 3;
	    dots_per_sync <<= 3;
	    lines_per_hsync = 0.99 + VSYNC / sec_per_line;
	    lines = (double) yres * 1.05;
	    ydiff = (lines - yres - lines_per_hsync) / 2;
	    vfreq =  1./(sec_per_line*lines);
	    if( (diff = dots_per_line - dots_per_sync - xres)  > 0 && ydiff > 0 &&
		vfreq >= MIN_VFREQ && vfreq <= MAX_VFREQ) {
		diff /= 2;
		printf("\t%3d\t%4d %4d %4d %4d", vga_rates[i], xres, xres+diff,
		       xres+diff+dots_per_sync, dots_per_line);
		printf("\t%4d %4d %4d %4d\t# Vfreq %.1f Hz\n", yres, yres+ydiff,
		       yres+ydiff+lines_per_hsync, lines, vfreq);
	    }
	}
    }
}
------------------ end xconf.c -------------------
-- 
Jonas Lagerblad
Phone Office: +46-31-830250 Home: +46-31-205955 Car: +46-10-2846031
FAX:	+46-31-831047
email:	jonas@sisu.se
Newsgroups: comp.unix.bsd