diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
commit | d6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch) | |
tree | ece253b876159b39c620e62b6c9b1174642e070e /sys/arch/i386/isa/pcvt/Util/vgaio |
initial import of NetBSD tree
Diffstat (limited to 'sys/arch/i386/isa/pcvt/Util/vgaio')
-rw-r--r-- | sys/arch/i386/isa/pcvt/Util/vgaio/CAUTION | 28 | ||||
-rw-r--r-- | sys/arch/i386/isa/pcvt/Util/vgaio/Makefile | 18 | ||||
-rw-r--r-- | sys/arch/i386/isa/pcvt/Util/vgaio/lex.l | 68 | ||||
-rw-r--r-- | sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.8 | 156 | ||||
-rw-r--r-- | sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.h | 71 | ||||
-rw-r--r-- | sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.y | 263 |
6 files changed, 604 insertions, 0 deletions
diff --git a/sys/arch/i386/isa/pcvt/Util/vgaio/CAUTION b/sys/arch/i386/isa/pcvt/Util/vgaio/CAUTION new file mode 100644 index 00000000000..e1eba06aaa4 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/vgaio/CAUTION @@ -0,0 +1,28 @@ +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 + diff --git a/sys/arch/i386/isa/pcvt/Util/vgaio/Makefile b/sys/arch/i386/isa/pcvt/Util/vgaio/Makefile new file mode 100644 index 00000000000..253d5ec18e1 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/vgaio/Makefile @@ -0,0 +1,18 @@ +PROG= vgaio +MAN8= vgaio.${MAN8EXT} + +SRCS= vgaio.y lex.l +YACC= yacc + +#YFLAGS+= -yd # Bison +#YFLAGS+= -v # verbose + +LFLAGS+= -I +LDADD= -lm -ly -ll + +CFLAGS+= -I ${.CURDIR}/obj -I ${.CURDIR} -g + +CLEANFILES+= y.tab.h +CLEANFILES+= y.output # comment file from bison + +.include <bsd.prog.mk> diff --git a/sys/arch/i386/isa/pcvt/Util/vgaio/lex.l b/sys/arch/i386/isa/pcvt/Util/vgaio/lex.l new file mode 100644 index 00000000000..2df1889b0ca --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/vgaio/lex.l @@ -0,0 +1,68 @@ +%{ +/* + * Copyright (c) 1994,1995 Joerg Wunsch + * + * All rights reserved. + * + * This program is free software. + * + * 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 Joerg Wunsch + * 4. The name of the developer may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 DEVELOPERS 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. + */ + +#ident "$Header: /cvs/OpenBSD/src/sys/arch/i386/isa/pcvt/Util/vgaio/Attic/lex.l,v 1.1 1995/10/18 08:50:49 deraadt Exp $" + +#include <stdio.h> +#include <stdlib.h> + +#include "vgaio.h" +#include "y.tab.h" + +extern YYSTYPE yylval; + +%} + +D [0-9a-fA-F] + +%% + +cr|CR { return CR; } + +ar|AR { return AR; } + +gr|GR { return GR; } + +sr|SR { return SR; } + +mi|MI { return MI; } + +{D}({D}*) { sscanf(yytext, "%x", &yylval.num); return NUM; } + +[ \t] { /* ignore */ } + +\n { return NEWLINE; } + +. { return yytext[0]; } diff --git a/sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.8 b/sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.8 new file mode 100644 index 00000000000..8275232cbc8 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.8 @@ -0,0 +1,156 @@ +.\" +.\" Copyright (c) 1994,1995 Joerg Wunsch +.\" +.\" All rights reserved. +.\" +.\" This program is free software. +.\" +.\" 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 Joerg Wunsch +.\" 4. The name of the developer may not be used to endorse or promote +.\" products derived from this software without specific prior written +.\" permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 DEVELOPERS 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. +.\" +.\" $Header: /cvs/OpenBSD/src/sys/arch/i386/isa/pcvt/Util/vgaio/Attic/vgaio.8,v 1.1 1995/10/18 08:50:49 deraadt Exp $ +.\" +.Dd December 31, 1994 +.Dt VGAIO 8 +.Sh NAME +.Nm vgaio +.Nd perform input/output on a Video Graphics Array +.Sh SYNOPSIS +.Nm vgaio +.Op Fl d +.Op Fl f Ar devname +.Sh DESCRIPTION +.Ss Purpose +.Nm Vgaio +is used to perform register-level input/output on a Video Graphics Array. +Since some of the sequences required to access those registers are very +silly, +.Nm vgaio +cares of all the things necessary and allows the user to access the +registers of several register groups with their symbolic names. + +.Ss Options +.Bl -tag -width 10n -offset indent -compact +.It Fl d +Turn on the grammar parser debugger. + +.It Fl f Ar devname +Operate on device +.Ar devname +instead of the default +.Pa /dev/console . + +.El +.Ss Command language +The command language of +.Nm +constitutes of some very simple tokens and rules. Commands are executed +line by line as they are entered. Each line may contain any number of +semicolon-separated input/output commands. + +Symbolic register names look like: + +.D1 Ao Em reggroup Ac Ao Em regnumber Ac + +with +.Aq Em regnumber +being any hexadecimal number +.Pq without a leading Em 0x , +and +.Aq Em reggroup +one of the strings +.Dq Em ar , +.Dq Em cr , +.Dq Em gr , +.Dq Em mi , +or +.Dq Em sr , +standing for the +.Em Attribute controller , +.Em CRT controller , +.Em Graphics controller , +.Em Miscellaneous Output Register , +or +.Em Timing sequencer , +respectively. + +An input instruction has the form + +.D1 Ao Em regname Ac ? + +and will cause +.Nm +to output a line like + +.Bd -ragged -offset indent +.Ao Em regname Ac \& = 0x Ns +.Aq Em number +.Ed + +An output instruction looks like + +.Bd -ragged -offset indent +.Ao Em regname Ac = +.Aq Em number +.Ed + +Spaces or Tabs between the +.Aq Em reggroup , +the +.Aq Em regnumber , +or any of the other tokens are ignored. They are not required anyway. + +The +.Dq Em mi +register does not require an argument +.Aq Em regnumber ; +it's actually being ignored. + + +.Ss Access control +The caller must have uid 0 in order to gain the required access to +the IO registers. + +.Sh FILES +.Pa /dev/console +is used as the default device to enable access to the IO registers. + +.Sh HISTORY +This program is considered +.Dq hackware . +It has been developed in order to simplify the process of developing other +software that needs to program the Video Graphics Array. + +Remember, to use this program, your kernel has to be compiled with XSERVER +being defined. + +.Sh AUTHOR +The program has been contributed by +.if n Joerg Wunsch, +.if t J\(:org Wunsch, +Dresden +.Aq joerg_wunsch@uriah.heep.sax.de . + diff --git a/sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.h b/sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.h new file mode 100644 index 00000000000..b2d09999282 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 1994 Joerg Wunsch + * + * All rights reserved. + * + * This program is free software. + * + * 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 Joerg Wunsch + * 4. The name of the developer may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 DEVELOPERS 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. + */ + +/* + * $Header + * The author may be reached unter <joerg_wunsch@uriah.sax.de> + * + * $Log: vgaio.h,v $ + * Revision 1.1 1995/10/18 08:50:49 deraadt + * Initial revision + * + * Revision 1.3 1995/10/07 21:46:02 jtc + * Overlay our pcvt with pcvt 3.32 sources. All of our fixes have been + * incorporated into the master sources, so it is unnecessary to resolve + * all the conflicts that would occur if we let CVS "merge" the versions. + * + * Revision 1.2 1995/03/05 22:46:27 joerg + * Upgrade to beta 3.20/b22 + * + * Revision 1.1 1994/03/29 02:47:25 mycroft + * pcvt 3.0, with some performance enhancements by Joerg Wunsch and me. + * + * Revision 1.2 1994/01/08 17:42:58 j + * cleanup + * made multiple commands per line work + * wrote man page + * + * + */ + +/* common structure to hold the definition for a VGA register */ + +#ifndef VGAIO_H +#define VGAIO_H + +struct reg { + int group, num; +}; + +#endif /* VGAIO_H */ diff --git a/sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.y b/sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.y new file mode 100644 index 00000000000..5bf47bebfa8 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/vgaio/vgaio.y @@ -0,0 +1,263 @@ +/* Hello emacs, this should be edited in -*- Fundamental -*- mode */ +%{ +/* + * Copyright (c) 1994,1995 Joerg Wunsch + * + * All rights reserved. + * + * This program is free software. + * + * 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 Joerg Wunsch + * 4. The name of the developer may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 DEVELOPERS 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. + */ + +#ident "$Header: /cvs/OpenBSD/src/sys/arch/i386/isa/pcvt/Util/vgaio/Attic/vgaio.y,v 1.1 1995/10/18 08:50:49 deraadt Exp $" + +#include <stdio.h> +#include <stdlib.h> +#include <sys/fcntl.h> +#include <machine/cpufunc.h> +#include <machine/pcvt_ioctl.h> + +#ifdef __NetBSD__ +#include <machine/pio.h> +#endif + +#include "vgaio.h" + +void setreg(struct reg r, int val); +void getreg(struct reg r); +void yyerror(const char *msg); + +#define YYDEBUG 1 + +unsigned short vgabase; + +%} + +%union { + int num; + struct reg reg; +} + +%token MI GR CR SR AR NEWLINE +%token <num> NUM + +%type <num> reggroup +%type <reg> register + +%% + +interpret: lines ; + +lines: line + | lines line + ; + +line: statements NEWLINE + | NEWLINE + | error NEWLINE { fprintf(stderr, "bing!\n"); } + ; + +statements: statement + | statements ';' statement + ; + +statement: register '?' { getreg($1); } + | register '=' NUM { setreg($1, $3); } + | /* lambda */ + ; + +register: reggroup NUM { $$.num = $2; $$.group = $1; } + /* useful for the MI register: */ + | reggroup { $$.num = 0; $$.group = $1; } + ; + +reggroup: GR { $$ = GR; } + | CR { $$ = CR; } + | SR { $$ = SR; } + | AR { $$ = AR; } + | MI { $$ = MI; } + ; + +%% + +static struct { + int id; + const char *name; +} regnames[] = { + {GR, "gr"}, {CR, "cr"}, {SR, "sr"}, {AR, "ar"}, {MI, "mi"}, + {0, 0} +}; + +const char *getname(struct reg r) { + int idx; + for(idx = 0; regnames[idx].id; idx++) + if(regnames[idx].id == r.group) + return regnames[idx].name; + return "??"; +} + +/* return ptr to string of 1s and 0s for value */ +char * +bin_str(unsigned long val, int length) { + static char buffer[80]; + int i = 0; + + if (length > 32) + length = 32; + + val = val << (32 - length); + + while (length--) + { + if (val & 0x80000000) + buffer[i++] = '1'; + else + buffer[i++] = '0'; + if ((length % 4) == 0 && length) + buffer[i++] = '.'; + val = val << 1; + } + return (buffer); +} + +void getreg(struct reg r) { + int val; /* FreeBSD gcc ONLY accepts an int */ + + switch(r.group) { + case GR: + outb(0x3ce, r.num); + val = inb(0x3cf); + break; + + case AR: + r.num &= 0x1f; + (void)inb(vgabase + 0x0a); + outb(0x3c0, r.num + 0x20); + val = inb(0x3c1); + break; + + case CR: + outb(vgabase + 4, r.num); + val = inb(vgabase + 5); + break; + + case SR: + outb(0x3c4, r.num); + val = inb(0x3c5); + break; + + case MI: + val = inb(0x3cc); + break; + } + + printf("%s%02x = 0x%02x = %sB\n", + getname(r), r.num, val, bin_str(val, 8)); +} + +void setreg(struct reg r, int val) { + switch(r.group) { + case GR: + outb(0x3ce, r.num); + outb(0x3cf, val); + break; + + case AR: + r.num &= 0x1f; + (void)inb(vgabase + 0x0a); + outb(0x3c0, r.num); + outb(0x3c0, val); + outb(0x3c0, r.num + 0x20); + break; + + case CR: + outb(vgabase + 4, r.num); + outb(vgabase + 5, val); + break; + + case SR: + outb(0x3c4, r.num); + outb(0x3c5, val); + break; + + case MI: + outb(0x3c2, val); + break; + } + + printf("%s%02x set to 0x%02x = %sB now\n", + getname(r), r.num, val, bin_str(val, 8)); +} + +void yyerror(const char *msg) { + fprintf(stderr, "yyerror: %s\n", msg); +} + +void usage(void) { + fprintf(stderr, "usage: vgaio [-d] [-f devname]\n"); + exit(2); +} + +int main(int argc, char **argv) { + int fd, c; + const char *devname = "/dev/console"; + + while((c = getopt(argc, argv, "df:")) != EOF) + switch(c) { + case 'd': + yydebug = 1; + break; + + case 'f': + devname = optarg; + break; + + case '?': + default: + usage(); + } + argc -= optind; + argv += optind; + if(argc > 0) + usage(); + + if((fd = open(devname, O_RDONLY)) < 0) { + perror("open(vga)"); + return 1; + } + + if(ioctl(fd, KDENABIO, 0) < 0) { + perror("ioctl(KDENABIO)"); + return 1; + } + vgabase = (inb(0x3cc) & 1)? 0x3d0: 0x3b0; + yyparse(); + + (void)ioctl(fd, KDDISABIO, 0); + return 0; +} |