pcvt cleanup. remove the set2061 program, it is so outdated that

nobody knows anymore what a 2061 chip is (hint: ELSA Winner 100 EISA).
This commit is contained in:
hm 2000-03-26 11:16:16 +00:00
parent 9ff72212a8
commit d66fe5f35c
7 changed files with 3 additions and 816 deletions

View File

@ -1,6 +1,8 @@
# $FreeBSD$
SUBDIR= keycap cursor fontedit fonts kcon loadfont scon \
userkeys vttest ispcvt mcon
SUBDIR+= vgaio kbdio set2061
SUBDIR+= vgaio kbdio
SUBDIR+= demo
SUBDIR+= Misc

View File

@ -1,28 +0,0 @@
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
THE USE OF THIS PROGRAM MAY DESTROY YOUR MONITOR !!!
====================================================
IF YOU DON'T KNOW WHAT YOU ARE DOING, STAY AWAY FROM IT !!!
===========================================================
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION

View File

@ -1,299 +0,0 @@
/*
* This code is derived from code available from the STB bulletin board
*
* $FreeBSD$
*/
/* $XFree86: mit/server/ddx/x386/common_hw/ICD2061Aalt.c,v 2.6 1994/04/15 05:10:30 dawes Exp $ */
#ifndef _KERNEL
#include "compiler.h"
#else
#define GCCUSESGAS
#define PCVT_STANDALONE 1
#endif
#define SEQREG 0x03C4
#define MISCREG 0x03C2
#define MISCREAD 0x03CC
double fref = 14.31818 * 2.0;
char ascclk[] = "VIDEO CLOCK ?";
unsigned short clknum;
unsigned short vlbus_flag;
unsigned short card;
unsigned short crtcaddr;
unsigned short clockreg;
static double range[15] = {50.0, 51.0, 53.2, 58.5, 60.7, 64.4, 66.8, 73.5,
75.6, 80.9, 83.2, 91.5, 100.0, 120.0, 120.0};
#ifdef __STDC__
static double genratio(unsigned int *p, unsigned int *q, double tgt);
static double f(unsigned int p, unsigned int q, double basefreq);
#if 0
static void prtbinary(unsigned int size, unsigned int val);
#endif
static void wait_vb();
static void wrt_clk_bit(unsigned int value);
static void init_clock(unsigned long setup, unsigned short crtcport);
#else
static double genratio();
static double f();
#if 0
static void prtbinary();
#endif
static void wait_vb();
static void wrt_clk_bit();
static void init_clock();
#endif
void AltICD2061SetClock(frequency, select)
register long frequency; /* in Hz */
int select;
{
unsigned int m, mval, ival;
int i;
long dwv;
double realval;
double freq, fvco;
double dev, devx;
double delta, deltax;
unsigned int p, q;
unsigned int bestp, bestq;
unsigned char tmp;
crtcaddr=(inb(0x3CC) & 0x01) ? 0x3D4 : 0x3B4;
outb(crtcaddr, 0x11); /* Unlock CRTC registers */
tmp = inb(crtcaddr + 1);
outb(crtcaddr + 1, tmp & ~0x80);
outw(crtcaddr, 0x4838); /* Unlock S3 register set */
outw(crtcaddr, 0xA039);
clknum = select;
freq = ((double)frequency)/1000000.0;
if (freq > range[14])
freq =range[14];
else if (freq <= 6.99)
freq = 7.0;
/*
* Calculate values to load into ICD 2061A clock chip to set frequency
*/
delta = 999.0;
dev = 999.0;
ival = 99;
mval = 99;
fvco = freq / 2;
for (m = 0; m < 8; m++) {
fvco *= 2.0;
for (i = 14; i >= 0; i--)
if (fvco >= range[i])
break;
if (i < 0)
continue;
if (i == 14)
break;
devx = (fvco - (range[i] + range[i+1])/2)/fvco;
if (devx < 0)
devx = -devx;
deltax = genratio(&p, &q, fvco);
if (delta < deltax)
continue;
if (deltax < delta || devx < dev) {
bestp = p;
bestq = q;
delta = deltax;
dev = devx;
ival = i;
mval = m;
}
}
fvco = fref;
for (m=0; m<mval; m++)
fvco /= 2.0;
realval = f(bestp, bestq, fvco);
dwv = ((((((long)ival << 7) | bestp) << 3) | mval) << 7) | bestq;
/*
* Write ICD 2061A clock chip
*/
init_clock(((unsigned long)dwv) | (((long)clknum) << 21), crtcaddr);
wait_vb();
wait_vb();
wait_vb();
wait_vb();
wait_vb();
wait_vb();
wait_vb(); /* 0.10 second delay... */
}
static double f(p, q, base)
unsigned int p;
unsigned int q;
double base;
{
return(base * (p + 3)/(q + 2));
}
static double genratio(p, q, tgt)
unsigned int *p;
unsigned int *q;
double tgt;
{
int k, m;
double test, mindiff;
unsigned int mmax;
mindiff = 999999999.0;
for (k = 13; k < 69; k++) { /* q={15..71}:Constraint 2 on page 14 */
m = 50.0*k/fref - 3;
if (m < 0)
m = 0;
mmax = 120*k/fref - 3; /* m..mmax is constraint 3 on page 14 */
if (mmax > 128)
mmax = 128;
while (m < mmax) {
test = f(m, k, fref) - tgt;
if (test < 0) test = -test;
if (mindiff > test) {
mindiff = test;
*p = m;
*q = k;
}
m++;
}
}
return (mindiff);
}
#if 0
static void prtbinary(size, val)
unsigned int size;
unsigned int val;
{
unsigned int mask;
int k;
mask = 1;
for (k=size; --k > 0 || mask <= val/2;)
mask <<= 1;
while (mask) {
fputc((mask&val)? '1': '0' , stderr);
mask >>= 1;
}
}
#endif
static void wait_vb()
{
while ((inb(crtcaddr+6) & 0x08) == 0)
;
while (inb(crtcaddr+6) & 0x08)
;
}
#ifdef __STDC__
static void init_clock(unsigned long setup, unsigned short crtcport)
#else
static void init_clock(setup, crtcport)
unsigned long setup;
unsigned short crtcport;
#endif
{
unsigned char nclk[2], clk[2];
unsigned short restore42;
unsigned short oldclk;
unsigned short bitval;
int i;
unsigned char c;
#ifndef PCVT_STANDALONE
(void)xf86DisableInterrupts();
#endif
oldclk = inb(0x3CC);
outb(crtcport, 0x42);
restore42 = inb(crtcport+1);
outw(0x3C4, 0x0100);
outb(0x3C4, 1);
c = inb(0x3C5);
outb(0x3C5, 0x20 | c);
outb(crtcport, 0x42);
outb(crtcport+1, 0x03);
outw(0x3C4, 0x0300);
nclk[0] = oldclk & 0xF3;
nclk[1] = nclk[0] | 0x08;
clk[0] = nclk[0] | 0x04;
clk[1] = nclk[0] | 0x0C;
outb(crtcport, 0x42);
i = inw(crtcport);
outw(0x3C4, 0x0100);
wrt_clk_bit(oldclk | 0x08);
wrt_clk_bit(oldclk | 0x0C);
for (i=0; i<5; i++) {
wrt_clk_bit(nclk[1]);
wrt_clk_bit(clk[1]);
}
wrt_clk_bit(nclk[1]);
wrt_clk_bit(nclk[0]);
wrt_clk_bit(clk[0]);
wrt_clk_bit(nclk[0]);
wrt_clk_bit(clk[0]);
for (i=0; i<24; i++) {
bitval = setup & 0x01;
setup >>= 1;
wrt_clk_bit(clk[1-bitval]);
wrt_clk_bit(nclk[1-bitval]);
wrt_clk_bit(nclk[bitval]);
wrt_clk_bit(clk[bitval]);
}
wrt_clk_bit(clk[1]);
wrt_clk_bit(nclk[1]);
wrt_clk_bit(clk[1]);
outb(0x3C4, 1);
c = inb(0x3C5);
outb(0x3C5, 0xDF & c);
outb(crtcport, 0x42);
outb(crtcport+1, restore42);
outb(0x3C2, oldclk);
outw(0x3C4, 0x0300);
#ifndef PCVT_STANDALONE
xf86EnableInterrupts();
#endif
}
static void wrt_clk_bit(value)
unsigned int value;
{
int j;
outb(0x3C2, value);
for (j=2; --j; )
inb(0x200);
}

View File

@ -1,13 +0,0 @@
PROG= set2061
SRCS= main.c ICD2061Aalt.c
CFLAGS+= -DGCCUSESGAS -DPCVT_STANDALONE
NOMAN=
all: $(PROG)
install:
@${ECHO} "set2061 is not installed automatically ...."
.include <bsd.prog.mk>
$(PROG): compiler.h

View File

@ -1,22 +0,0 @@
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
THE USE OF THIS PROGRAM MAY DESTROY YOUR MONITOR !!!
====================================================
IF YOU DON'T KNOW WHAT YOU ARE DOING, STAY AWAY FROM IT !!!
===========================================================
Read the file "CAUTION" before proceeding !!!
The files:
ICD2061Aalt.c and
compiler.h
come from the Xfree86 2.1 distribution and have been slightly modified to
fit in a non-XFree environment.
I use it to program the clock generator ICD2061a on my S3 928 based ELSA
Winner VGA board to 40MHz for clock generator #2: set2061 -n2 -f40000000.
This enables me to use 132 columns mode on this VGA board.

View File

@ -1,341 +0,0 @@
/* $XFree86: mit/server/ddx/x386/common/compiler.h,v 2.3 1993/10/03 14:55:28 dawes Exp $ */
/*
* Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Thomas Roell not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Thomas Roell makes no representations
* about the suitability of this software for any purpose. It is provided
* "as is" without express or implied warranty.
*
* THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL THOMAS ROELL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
* $FreeBSD$
*/
#ifndef _COMPILER_H
#define _COMPILER_H
#ifndef __STDC__
# ifdef signed
# undef signed
# endif
# ifdef volatile
# undef volatile
# endif
# ifdef const
# undef const
# endif
# define signed /**/
# ifdef __GNUC__
# define volatile __volatile__
# define const __const__
# else
# define const /**/
# endif /* __GNUC__ */
#endif /* !__STDC__ */
#ifdef NO_INLINE
extern void outb();
extern void outw();
extern unsigned int inb();
extern unsigned int inw();
#if NeedFunctionPrototypes
extern unsigned char rdinx(unsigned short, unsigned char);
extern void wrinx(unsigned short, unsigned char, unsigned char);
extern void modinx(unsigned short, unsigned char, unsigned char, unsigned char);
extern int testrg(unsigned short, unsigned char);
extern int textinx2(unsigned short, unsigned char, unsigned char);
extern int textinx(unsigned short, unsigned char);
#else /* NeedFunctionProtoypes */
extern unsigned char rdinx();
extern void wrinx();
extern void modinx();
extern int testrg();
extern int textinx2();
extern int textinx();
#endif /* NeedFunctionProtoypes */
#else /* NO_INLINE */
#ifdef __GNUC__
#ifndef FAKEIT
#ifdef GCCUSESGAS
/*
* If gcc uses gas rather than the native assembler, the syntax of these
* inlines has to be different. DHD
*/
static __inline__ void
outb(port, val)
short port;
char val;
{
__asm__ __volatile__("outb %0,%1" : :"a" (val), "d" (port));
}
static __inline__ void
outw(port, val)
short port;
short val;
{
__asm__ __volatile__("outw %0,%1" : :"a" (val), "d" (port));
}
static __inline__ unsigned int
inb(port)
short port;
{
unsigned char ret;
__asm__ __volatile__("inb %1,%0" :
"=a" (ret) :
"d" (port));
return ret;
}
static __inline__ unsigned int
inw(port)
short port;
{
unsigned short ret;
__asm__ __volatile__("inw %1,%0" :
"=a" (ret) :
"d" (port));
return ret;
}
#else /* GCCUSESGAS */
static __inline__ void
outb(port, val)
short port;
char val;
{
__asm__ __volatile__("out%B0 (%1)" : :"a" (val), "d" (port));
}
static __inline__ void
outw(port, val)
short port;
short val;
{
__asm__ __volatile__("out%W0 (%1)" : :"a" (val), "d" (port));
}
static __inline__ unsigned int
inb(port)
short port;
{
unsigned char ret;
__asm__ __volatile__("in%B0 (%1)" :
"=a" (ret) :
"d" (port));
return ret;
}
static __inline__ unsigned int
inw(port)
short port;
{
unsigned short ret;
__asm__ __volatile__("in%W0 (%1)" :
"=a" (ret) :
"d" (port));
return ret;
}
#endif /* GCCUSESGAS */
#else /* FAKEIT */
static __inline__ void
outb(port, val)
short port;
char val;
{
}
static __inline__ void
outw(port, val)
short port;
short val;
{
}
static __inline__ unsigned int
inb(port)
short port;
{
return 0;
}
static __inline__ unsigned int
inw(port)
short port;
{
return 0;
}
#endif /* FAKEIT */
#else /* __GNUC__ */
#if !defined(AMOEBA) && !defined(_MINIX)
# if defined(__STDC__) && (__STDC__ == 1)
# define asm __asm
# endif
# ifdef SVR4
# include <sys/types.h>
# ifndef __USLC__
# define __USLC__
# endif
# endif
# include <sys/inline.h>
#endif
#endif
/*
*-----------------------------------------------------------------------
* Port manipulation convenience functions
*-----------------------------------------------------------------------
*/
#ifndef __GNUC__
#define __inline__ /**/
#endif
/*
* rdinx - read the indexed byte port 'port', index 'ind', and return its value
*/
static __inline__ unsigned char
#ifdef __STDC__
rdinx(unsigned short port, unsigned char ind)
#else
rdinx(port, ind)
unsigned short port;
unsigned char ind;
#endif
{
if (port == 0x3C0) /* reset attribute flip-flop */
(void) inb(0x3DA);
outb(port, ind);
return(inb(port+1));
}
/*
* wrinx - write 'val' to port 'port', index 'ind'
*/
static __inline__ void
#ifdef __STDC__
wrinx(unsigned short port, unsigned char ind, unsigned char val)
#else
wrinx(port, ind, val)
unsigned short port;
unsigned char ind, val;
#endif
{
outb(port, ind);
outb(port+1, val);
}
/*
* modinx - in register 'port', index 'ind', set the bits in 'mask' as in 'new';
* the other bits are unchanged.
*/
static __inline__ void
#ifdef __STDC__
modinx(unsigned short port, unsigned char ind,
unsigned char mask, unsigned char new)
#else
modinx(port, ind, mask, new)
unsigned short port;
unsigned char ind, mask, new;
#endif
{
unsigned char tmp;
tmp = (rdinx(port, ind) & ~mask) | (new & mask);
wrinx(port, ind, tmp);
}
/*
* tstrg - returns true iff the bits in 'mask' of register 'port' are
* readable & writable.
*/
static __inline__ int
#ifdef __STDC__
testrg(unsigned short port, unsigned char mask)
#else
tstrg(port, mask)
unsigned short port;
unsigned char mask;
#endif
{
unsigned char old, new1, new2;
old = inb(port);
outb(port, old & ~mask);
new1 = inb(port) & mask;
outb(port, old | mask);
new2 = inb(port) & mask;
outb(port, old);
return((new1 == 0) && (new2 == mask));
}
/*
* testinx2 - returns true iff the bits in 'mask' of register 'port', index
* 'ind' are readable & writable.
*/
static __inline__ int
#ifdef __STDC__
testinx2(unsigned short port, unsigned char ind, unsigned char mask)
#else
testinx2(port, ind, mask)
unsigned short port;
unsigned char ind, mask;
#endif
{
unsigned char old, new1, new2;
old = rdinx(port, ind);
wrinx(port, ind, old & ~mask);
new1 = rdinx(port, ind) & mask;
wrinx(port, ind, old | mask);
new2 = rdinx(port, ind) & mask;
wrinx(port, ind, old);
return((new1 == 0) && (new2 == mask));
}
/*
* testinx - returns true iff all bits of register 'port', index 'ind' are
* readable & writable.
*/
static __inline__ int
#ifdef __STDC__
testinx(unsigned short port, unsigned char ind)
#else
testinx(port, ind, mask)
unsigned short port;
unsigned char ind;
#endif
{
return(testinx2(port, ind, 0xFF));
}
#endif /* NO_INLINE */
#endif /* _COMPILER_H */

View File

@ -1,112 +0,0 @@
/*
* Copyright (c) 1994 Hellmuth Michaelis
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by
* Hellmuth Michaelis
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
static char *id =
"@(#)set2061.c, 1.00, Last Edit-Date: [Sun Jan 15 19:52:05 1995]";
/*---------------------------------------------------------------------------*
*
* history:
*
* -hm start using 132 columns on my Elsa Winner
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <fcntl.h>
#include <machine/pcvt_ioctl.h>
#define DEFAULTFD 0
void AltICD2061SetClock(long frequency, int select);
main(argc,argv)
int argc;
char *argv[];
{
extern int optind;
extern int opterr;
extern char *optarg;
int fd;
int c;
long freq = -1;
int no = -1;
while( (c = getopt(argc, argv, "f:n:")) != -1)
{
switch(c)
{
case 'f':
freq = atoi(optarg);
break;
case 'n':
no = atoi(optarg);
break;
case '?':
default:
usage();
break;
}
}
if(freq == -1 || no == -1)
usage();
if((fd = open("/dev/console", O_RDONLY)) < 0)
fd = DEFAULTFD;
if(ioctl(fd, KDENABIO, 0) < 0)
{
perror("ioctl(KDENABIO)");
return 1;
}
AltICD2061SetClock(freq, no);
(void)ioctl(fd, KDDISABIO, 0);
exit(0);
}
usage()
{
fprintf(stderr,"\nset2061 - program the ICD2061 video clock chip\n");
fprintf(stderr,"usage: set2061 -f <freq> -n <no>\n");
fprintf(stderr," -f <freq> frequency in Hz\n");
fprintf(stderr," -n <no> clock generator number\n");
exit(1);
}