]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/man/man4/pcvt.4
mdoc(7) police:
[FreeBSD/FreeBSD.git] / share / man / man4 / pcvt.4
1 .\"
2 .\"  Copyright (c) 1992, 2000 Hellmuth Michaelis, Brian Dunford-Shore,
3 .\"                           Joerg Wunsch and Holger Veit.
4 .\"
5 .\"  All rights reserved.
6 .\"
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
9 .\" are met:
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\"    notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\"    notice, this list of conditions and the following disclaimer in the
14 .\"    documentation and/or other materials provided with the distribution.
15 .\" 3. All advertising materials mentioning features or use of this software
16 .\"    must display the following acknowledgement:
17 .\"     This product includes software developed by Hellmuth Michaelis,
18 .\"     Brian Dunford-Shore, Joerg Wunsch and Holger Veit.
19 .\" 4. The name authors may not be used to endorse or promote products
20 .\"    derived from this software without specific prior written permission.
21 .\"
22 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
23 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 .\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27 .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 .\"
33 .\" Last Edit-Date: [Sun Mar 26 14:39:08 2000]
34 .\"
35 .\" $FreeBSD$
36 .\"
37 .\" Man page pcvt(4) created after pcvt_ioctl.h on 13-Jan-93
38 .\" by Joerg Wunsch
39 .\"
40 .Dd March 26, 2000
41 .Dt PCVT 4
42 .Os
43 .Sh NAME
44 .Nm pcvt ,
45 .Nm vt
46 .Nd VT220 virtual screen system console
47 .Sh SYNOPSIS
48 .Cd "device vt0 at isa?"
49 .Sh DESCRIPTION
50 .Ss Overview
51 The
52 .Nm
53 driver provides a virtual screen handling system.
54 Probably most important is an emulation of a wide range
55 of DEC
56 .Tn VT-220
57 functionality.
58 See
59 .Sx Features
60 for a detailed description.
61 .Pp
62 The
63 .Nm
64 driver requires the keyboard driver
65 .Nm atkbd
66 to be also configured in the kernel.
67 .Ss Features
68 .Bl -bullet -compact
69 .It
70 Almost full DEC
71 .Tn VT220
72 functionality
73 (moving towards
74 .Tn VT320 )
75 .It
76 Completely independent virtual terminals for MDA/HGC/CGA/EGA and VGA
77 .It
78 25, 28, 35, 40, 43 or 50x80 screen resolution for each virtual screen
79 .It
80 Fully remappable keyboard to support national keyboards
81 .It
82 All VT220 character sets plus ISO Latin-1 and DEC technical supported
83 .It
84 VT220 downloadable character set supported when run on EGA/VGA
85 .It
86 VT220 user defined keys for each virtual terminal
87 .It
88 Optional function key label support
89 \('a la Hewlett-Packard terminals
90 .It
91 Display function codes functionality
92 .It
93 Support for MDA, CGA, EGA and VGA display adaptors
94 .It
95 Support for 132 column operation on some VGA chipsets
96 .It
97 X Window Support for XFree86
98 (requires
99 .Em XSERVER
100 to be defined)
101 .El
102 .Pp
103 What it cannot:
104 .Pp
105 .Bl -bullet -compact
106 .It
107 No double wide/high characters
108 .It
109 No softscroll
110 .It
111 No inverse background
112 .It
113 No VT220 printer output support
114 .It
115 No VT52 support at all
116 .It
117 No 8-bit controls
118 .It
119 Only limited AT-keyboard
120 (84 keys)
121 support
122 .El
123 .Ss Scrollback
124 Each virtual
125 .Nm
126 virtual terminal has 8 pages of memory attached which are used as a
127 scrollback buffer.
128 By using
129 .Em SHIFT-PageUp
130 and
131 .Em SHIFT-PageDown
132 it is possible to scroll the screen back and forward.
133 .Ss Configuration
134 The
135 .Nm
136 console driver is available for the Intel-based
137 .Fx
138 operating system.
139 It has been designed to be highly configurable in order to satisfy
140 everyone's needs.
141 The preferred way for those configurations is to
142 provide appropriate
143 .Em options
144 lines within the config file, possibly overriding the built-in default
145 values.
146 .Pp
147 The following list gives a short overview of the available configuration
148 options.
149 Refer to the file
150 .Pa i386/isa/pcvt/pcvt_conf.h
151 in the kernel source tree for detailed documentation.
152 .Pp
153 Note: the following conventions apply to all the Boolean options.
154 If an option is given with no value, a value of 1
155 (activated)
156 is substituted.
157 If an option value is given as 0, this options is
158 deactivated.
159 Any other value is substituted by 1, too.
160 If an option
161 is omitted, a built-in default is assumed.
162 .Bl -tag -width indent
163 .It Em PCVT_NSCREENS
164 Defines the number of virtual screens.
165 .Pp
166 Default: 8
167 .It Em PCVT_VT220KEYB
168 If activated, a keyboard layout resembling a DEC VT200 (TM) is generated.
169 If deactivated, a mixture between VT220 and HP is used.
170 See the files
171 .Pa Keyboard.VT
172 and
173 .Pa Keyboard.HP
174 in the
175 .Nm
176 documentation directory for a full description.
177 .Pp
178 Default: off
179 .It Em PCVT_SCREENSAVER
180 Enables the builtin screensaver feature.
181 .Pp
182 Default: on
183 .It Em PCVT_PRETTYSCRNS
184 If enabled, a blinking-star screensaver is used.
185 If disabled, the screen
186 is simply blanked
187 (which might be useful for energy-saving monitors).
188 .Pp
189 Default: on
190 .It Em PCVT_CTRL_ALT_DEL
191 If enabled, the key combination
192 .Aq Em Ctrl
193 .Aq Em Alt
194 .Aq Em Del
195 invokes a CPU reset.
196 .Pp
197 Default: off
198 .It Em PCVT_USEKBDSEC
199 Do NOT override a security lock for the keyboard.
200 .Pp
201 Default: on
202 .It Em PCVT_24LINESDEF
203 If enabled, the 25-line modi
204 (VT emulation with 25 lines, and HP emulation with 28 lines)
205 default to 24 lines only to provide a better compatibility to the
206 original DEV VT220 (TM). Thus it should be possible to use the
207 terminal information for those terminals without further changes.
208 Note that this is a startup option; it is possible to toggle between
209 the 24- and 25-lines' display by the
210 .Xr scon 1
211 utility.
212 .Pp
213 Default: off
214 .It Em PCVT_META_ESC
215 If enabled, a sequence composed of
216 .Aq Em esc ,
217 followed by the normal key code is emitted if a key is pressed with the
218 .Aq Em Alt
219 key modifier.
220 If disabled, then normal key code with the value
221 .Em 0x80
222 added is sent.
223 .Pp
224 Default: off
225 .El
226 .Pp
227 Note that there are further options available which are mainly used for
228 debugging purposes or as a workaround for hardware problems.
229 They are found in
230 .Pa i386/isa/pcvt/pcvt_conf.h
231 along with their documentation.
232 .Ss Internal Functions
233 The functionality described below may be accessed via
234 .Xr ioctl 2
235 system calls with a file descriptor opened on a device node
236 related to the
237 .Nm
238 driver.
239 To make use of them, a program should contain the following line:
240 .Pp
241 .Dl #include <machine/pcvt_ioctl.h>
242 .Pp
243 Any parameter definitions cited below can be found in that file.
244 .Pp
245 .Em Keyboard related functions
246 .Pp
247 Three functions are related to basic keyboard hardware:
248 .Pp
249 .Bl -tag -width 20n -offset indent -compact
250 .It KBDRESET
251 reset keyboard, set defaults;
252 .It KBDGTPMAT
253 get current typematic value, parameter is a pointer to int where
254 the values is stored to;
255 .It KBDSTPMAT
256 set current typematic value, similar to above command.
257 .El
258 .Pp
259 Symbolic values are available for the appropriate constants.
260 To specify the initial typematic delay time, they are
261 KBD_TPD250 for 250 ms through
262 KBD_TPD1000 for 1000 ms, in steps of 250 ms.
263 The typematic repeat
264 rates are
265 KBD_TPM300, specifying 30.0 characters per second through
266 KBD_TPM20 for 2.0 characters per second.
267 The intermediate values
268 are: 30.0, 26.7, 24.0, 21.8, 20.0, 18.5, 17.1, 16.0, 15.0, 13.3,
269 12.0, 10.9, 10.0, 9.2, 8.6, 8.0, 7.5, 6.7, 6.0, 5.5, 5.0, 4.6, 4.3,
270 4.0, 3.7, 3.3, 3.0, 2.7, 2.5, 2.3, 2.1, 2.0 characters per second.
271 .Pp
272 .Bl -tag -width 20n -offset indent -compact
273 .It KBDGREPSW
274 get key repetition switch, and
275 .It KBDSREPSW
276 set key repetition switch
277 .El
278 .Pp
279 again take a pointer to int as argument.
280 They manipulate the
281 drivers internal keyboard repetition flag, possible values are:
282 KBD_REPEATOFF or KBD_REPEATON.
283 .Pp
284 .Bl -tag -width 20n -offset indent -compact
285 .It KBDGLEDS
286 get LED state, and
287 .It KBDSLEDS
288 set LED state manipulate the keyboard indicators, but do not influence
289 the drivers idea of lock key state.
290 .El
291 .Pp
292 The int where the argument points to
293 may have the values
294 KBD_SCROLLLOCK, KBD_NUMLOCK, KBD_CAPSLOCK, which may be used in any
295 conjunction.
296 .Pp
297 .Bl -tag -width 20n -offset indent -compact
298 .It KBDGLOCK
299 gets state of SCROLL,NUM,CAPS, and
300 .It KBDSLOCK
301 sets state of SCROLL,NUM,CAPS + LEDs
302 .El
303 .Pp
304 should be used in a same manner to get/set the drivers internal
305 LED flags.
306 .Pp
307 .Em Keyboard remapping
308 .Pp
309 One important feature of the
310 .Nm
311 driver is its ability to overload the built in key definition.
312 .Pp
313 .Bl -tag -width 20n -offset indent -compact
314 .It KBDGCKEY
315 get current key values,
316 .It KBDSCKEY
317 set new key assignment values, and
318 .It KBDGOKEY
319 get original key assignment values
320 .El
321 .Pp
322 arrange those functions.
323 The take a pointer to a
324 .Em struct kbd_ovlkey
325 as argument as described below.
326 In addition,
327 .Pp
328 .Bl -tag -width 20n -offset indent -compact
329 .It KBDRMKEY
330 removes a key assignment, taking a pointer to an int as argument which
331 contains the affected key number;
332 .It KBDDEFAULT
333 removes all key assignments.
334 .El
335 .Bd -literal
336 struct kbd_ovlkey                /* complete definition of a key */
337 {
338     u_short keynum;                      /* the key itself */
339     u_short type;                        /* type of key, see below */
340     u_char  subu;                        /* subtype, ignored on write */
341     char    unshift[KBDMAXOVLKEYSIZE+1]; /* emitted string, unshifted */
342     u_char  subs;                        /* subtype, ignored on write */
343     char    shift[KBDMAXOVLKEYSIZE+1];   /* emitted string, shifted */
344     u_char  subc;                        /* subtype, ignored on write */
345     char    ctrl[KBDMAXOVLKEYSIZE+1];    /* emitted string, control */
346     u_char  suba;                        /* subtype, ignored on write */
347     char    altgr[KBDMAXOVLKEYSIZE+1];   /* emitted string, altgr */
348 };
349 .Ed
350 .Pp
351 The appropriate values for the
352 .Em type
353 field are:
354 .Pp
355 .Bl -tag -width 20n -offset indent -compact
356 .It KBD_NONE
357 no function, key is disabled,
358 .It KBD_SHIFT
359 keyboard shift,
360 .It KBD_META
361 alternate shift, sets bit8 to ASCII code,
362 .It KBD_NUM
363 numeric shift, keypad numeric / application mode,
364 .It KBD_CTL
365 control code generation,
366 .It KBD_CAPS
367 caps shift - swaps case of letter,
368 .It KBD_ASCII
369 ASCII code generating key,
370 .It KBD_SCROLL
371 stop output,
372 .It KBD_FUNC
373 function key,
374 .It KBD_KP
375 keypad keys,
376 .It KBD_BREAK
377 ignored,
378 .It KBD_ALTGR
379 AltGr translation feature,
380 .It KBD_SHFTLOCK
381 shift lock,
382 .It KBD_CURSOR
383 cursor keys, and
384 .It KBD_RETURN
385 .Dq Return
386 or
387 .Dq Enter
388 keys.
389 .El
390 .Pp
391 The
392 .Em subtype
393 field contains one of the values
394 .Pp
395 .Bl -tag -width 20n -offset indent -compact
396 .It KBD_SUBT_STR
397 key is bound to a string, or
398 .It KBD_SUBT_FNC
399 key is bound to a function.
400 .El
401 .Pp
402 .Em Downloadable character set interface
403 .Pp
404 EGA and VGA video adaptors provide the capability of downloadable
405 software fonts.
406 Since the
407 .Sq native character set
408 of any IBM-compatible PC video board does not allow the full interpretation
409 of DEC multinational character set or ISO Latin-1
410 (ISO 8859-1),
411 this might be very useful for a U**X environment.
412 .Pp
413 .Bl -tag -width 20n -offset indent -compact
414 .It VGASETFONTATTR
415 set font attr, and
416 .It VGAGETFONTATTR
417 get font attr
418 .El
419 .Pp
420 are used to manipulate the drivers information about a downloaded
421 font.
422 The take a pointer to a
423 .Em struct vgafontattr
424 as argument:
425 .Bd -literal
426 struct vgafontattr {
427     int character_set;          /* VGA character set */
428     int font_loaded;            /* Mark font loaded or unloaded */
429     int screen_size;            /* Character rows per screen */
430     int character_scanlines;    /* Scanlines per character - 1 */
431     int screen_scanlines;       /* Scanlines per screen - 1 byte */
432 };
433 .Ed
434 .Pp
435 Each character of each font is to be downloaded with
436 .Pp
437 .Bl -tag -width 20n -offset indent -compact
438 .It VGALOADCHAR
439 load vga char,
440 .El
441 .Pp
442 taking a pointer to
443 .Em struct vgaloadchar
444 as its argument:
445 .Bd -literal
446 struct vgaloadchar {
447     int character_set;       /* VGA character set to load into */
448     int character;           /* Character to load */
449     int character_scanlines; /* Scanlines per character */
450     u_char char_table[32];   /* VGA character shape table */
451 };
452 .Ed
453 .Pp
454 The field
455 .Em character_set
456 takes the values
457 CH_SET0, CH_SET1, CH_SET2, CH_SET3 on EGA's or VGA's. Since VGA's
458 might have up to eight simultaneously loaded fonts, they can take
459 CH_SET4, CH_SET5, CH_SET6, or CH_SET7, too.
460 .Pp
461 Note that there's a dependence between the font size
462 and a possible screen height
463 (in character rows),
464 depending on the video adaptor used:
465 .Bd -literal
466 Screen size (rows) on:          EGA             VGA
467 Font size
468
469 8 x 8                           43              50
470 8 x 10                          35              40
471 8 x 14                          25              28
472 8 x 16                          not             25
473                                 applicable
474 .Ed
475 .Pp
476 .Em General screen manipulation commands
477 .Pp
478 .Bl -tag -width 20n -offset indent -compact
479 .It VGACURSOR
480 sets cursor shape,
481 .El
482 .Pp
483 taking a pointer to the following structure as argument:
484 .Bd -literal
485 struct cursorshape {
486     int screen_no; /* screen number for which to set,               */
487                    /*  or -1 to set on current active screen        */
488     int start;     /* top scanline, range 0... Character Height - 1 */
489     int end;       /* end scanline, range 0... Character Height - 1 */
490 };
491 .Ed
492 .Pp
493 .Bl -tag -width 20n -offset indent -compact
494 .It VGASETSCREEN
495 set screen info, and
496 .It VGAGETSCREEN
497 get screen info,
498 .El
499 .Pp
500 provide an interface to some general driver internal variables
501 which might modify the behaviour of the screens,
502 or which might simply be used to force the driver to switch
503 to one certain screen.
504 Their argument is a pointer to the structure:
505 .Bd -literal
506 struct screeninfo {
507     int adaptor_type;   /* type of video adaptor installed     */
508                         /* read only, ignored on write (yet!)  */
509     int totalfonts;     /* no of downloadable fonts            */
510                         /* read only, ignored on write         */
511     int totalscreens;   /* no of virtual screens               */
512                         /* read only, ignored on write         */
513     int screen_no;      /* screen number, this was got from    */
514                         /* on write, if -1, apply pure_vt_mode */
515                         /* and/or screen_size to current screen*/
516                         /* else to screen_no supplied          */
517     int current_screen; /* screen number, which is displayed.  */
518                         /* on write, if -1, make this screen   */
519                         /* the current screen, else set current*/
520                         /* displayed screen to parameter       */
521     int pure_vt_mode;   /* flag, pure VT mode or HP/VT mode    */
522                         /* on write, if -1, no change          */
523     int screen_size;    /* screen size                         */
524                         /* on write, if -1, no change          */
525     int force_24lines;  /* force 24 lines if 25 lines VT mode  */
526                         /* or 28 lines HP mode to get pure     */
527                         /* VT220 screen size                   */
528                         /* on write, if -1, no change          */
529     int vga_family;     /* if adaptor_type = VGA, this reflects*/
530                         /* the chipset family after a read     */
531                         /* nothing happenes on write ...       */
532     int vga_type;       /* if adaptor_type = VGA, this reflects*/
533                         /* the chipset after a read            */
534                         /* nothing happenes on write ...       */
535     int vga_132;        /* set to 1 if driver has support for  */
536                         /* 132 column operation for chipset    */
537                         /* currently ignored on write          */
538 };
539 .Ed
540 .Pp
541 Its field
542 .Em pure_vt_mode
543 may take the values M_HPVT for a mixed VTxxx and HP Mode, with function
544 key labels and a status line, or M_PUREVT for only VTxxx sequences
545 recognized, with no labels.
546 .Pp
547 .Bl -tag -width 20n -offset indent -compact
548 .It VGASETCOLMS
549 sets the number of columns for the current screen,
550 .El
551 .Pp
552 its parameter is a pointer to an integer containing either a value of 80,
553 or a value of 132.
554 Note that setting the number of columns to 132 is only supported on
555 some VGA adaptors.
556 Any unsupported numbers cause the ioctl to fail with
557 .Va errno
558 (see
559 .Xr intro 2 )
560 being set to
561 .Er EINVAL .
562 .Pp
563 .Em VGA color palette interface
564 .Pp
565 Only on VGA adaptors, there's a color palette register at the output.
566 It is responsible for the red, green and blue output voltage provided
567 for each of the 256 internal color codes, each lying in the range of
568 0 through 63 (with 63 representing the brightest value for a base color).
569 Thus, these adaptors map each color code to a color of a
570 .Dq palette
571 out of 262144 colors.
572 The commands
573 .Pp
574 .Bl -tag -width 20n -offset indent -compact
575 .It VGAREADPEL
576 read VGA palette entry, and
577 .It VGAWRITEPEL
578 write VGA palette entry
579 .El
580 .Pp
581 establish an interface to these palette registers.
582 Their argument is
583 a pointer to:
584 .Bd -literal
585 struct vgapel {
586     unsigned idx;      /* index into palette, 0 .. 255 valid   */
587     unsigned r, g, b;  /* RGB values, masked by VGA_PMASK (63) */
588 };
589 .Ed
590 .Pp
591 .Em Driver identification
592 .Pp
593 .Bl -tag -width 20n -offset indent -compact
594 .It VGAPCVTID
595 returns information if the current compiled in driver is pcvt and it's
596 major and minor revision numbers. the call is taking a pointer to the
597 following structure as argument:
598 .El
599 .Bd -literal
600 struct pcvtid {
601 #define PCVTIDNAMELN  16                /* driver id - string length */
602         char name[PCVTIDNAMELN];        /* driver name, == PCVTIDSTR    */
603 #define PCVTIDNAME    "pcvt"            /* driver id - string */
604         int rmajor;                     /* revision number, major       */
605 #define PCVTIDMAJOR   3
606         int rminor;                     /* revision number, minor       */
607 #define PCVTIDMINOR   00
608 };
609 .Ed
610 .Pp
611 .Bl -tag -width 20n -offset indent -compact
612 .It VGAPCVTINFO
613 returns information if the current compiled in driver is pcvt and it's
614 compile time options. the call is taking a pointer to the following
615 structure as argument:
616 .El
617 .Bd -literal
618 struct pcvtinfo {
619         u_int opsys;                    /* PCVT_xxx(x)BSD */
620 #define CONF_UNKNOWNOPSYS       0
621 #define CONF_386BSD             1       /* unsupported !!! */
622 #define CONF_NETBSD             2
623 #define CONF_FREEBSD            3
624         u_int opsysrel;                 /* Release for NetBSD/FreeBSD */
625         u_int nscreens;                 /* PCVT_NSCREENS */
626         u_int scanset;                  /* PCVT_SCANSET */
627         u_int updatefast;               /* PCVT_UPDATEFAST */
628         u_int updateslow;               /* PCVT_UPDATESLOW */
629         u_int sysbeepf;                 /* PCVT_SYSBEEPF */
630         u_int pcburst;                  /* PCVT_PCBURST */
631         u_int kbd_fifo_sz;              /* PCVT_KBD_FIFO_SZ */
632
633 /* config booleans */
634
635         u_long compile_opts;            /* PCVT_xxxxxxxxxxxxxxx */
636 };
637 .Ed
638 .Pp
639 .Em Screen saver
640 .Pp
641 Depending on the configuration of a
642 .Nm
643 driver, their might be a simple screen saver available.
644 It is controlled
645 by the command
646 .Pp
647 .Bl -tag -width 20n -offset indent -compact
648 .It VGASCREENSAVER
649 set timeout for screen saver in seconds; 0 turns it off,
650 .El
651 .Pp
652 taking a pointer to an integer as argument.
653 Despite of its command name,
654 this is available on
655 .Em any
656 kind of adaptor if configured in by the
657 .Xr config 8
658 option
659 .Dq PCVT_SCREENSAVER
660 .Pp
661 .Em Compatibility commands for USL-style VT's
662 .Pp
663 .Nm
664 supports a subset of the USL-style commands used to control
665 the virtual terminal interface.
666 This feature is mainly intended to allow
667 .Em XFree86
668 to switch between virtual screens even when
669 running an X server.
670 They are ugly with respect to the implied semantics
671 (i.e., they break Berkeley semantics).
672 See the file
673 .Pa i386/include/pcvt_ioctl.h
674 for their documentation.
675 .Sh FILES
676 .Bl -tag -width /usr/include/machine/pcvt_ioctl.h
677 .It Pa /usr/include/machine/pcvt_ioctl.h
678 Definitions for
679 .Xr ioctl 2
680 function calls
681 .It Pa /dev/ttyv?
682 .It Pa /dev/console
683 Device nodes to access the
684 .Nm
685 driver
686 .It Pa i386/isa/pcvt/pcvt_conf.h
687 (relative to the kernel source tree)
688 Documents the various compile-time options to tailor
689 .Nm .
690 .El
691 .Sh HISTORY
692 The
693 .Nm
694 driver has been developed for and contributed to 386BSD 0.1.
695 Since then
696 .Nm
697 has become a standard part of
698 .Fx ,
699 .Nx
700 and
701 OpenBSD.
702 Since
703 .Fx 5.0 ,
704 .Nm
705 is
706 .Fx
707 specific with support for
708 .Nx
709 and
710 .Ox
711 removed to
712 ease further maintenance.
713 .Sh AUTHORS
714 .An -nosplit
715 Written by
716 .An Hellmuth Michaelis Aq hm@FreeBSD.org
717 with much help from
718 .An Brian Dunford-Shore Aq brian@morpheus.wustl.edu
719 and
720 .An J\(:org Wunsch Aq joerg@FreeBSD.org .
721 .Pp
722 This driver is based on several people's previous work, notably
723 the historic
724 .Xr pccons 4
725 implementation by
726 .An William Jolitz Aq ljolitz@cardio.ucsf.edu
727 and
728 .An Don Ahn ,
729 and the keyboard mapping code from
730 .An Holger Veit Aq veit@first.gmd.de .
731 .Sh SEE ALSO
732 .Xr cursor 1 ,
733 .Xr loadfont 1 ,
734 .Xr scon 1 ,
735 .Xr intro 2 ,
736 .Xr ioctl 2 ,
737 .Xr atkbd 4 ,
738 .Xr keyboard 4 ,
739 .Xr config 8 ,
740 .Xr ispcvt 8
741 .Sh BUGS
742 At least one left.