console, keyboard, log - system console

     The TTY device driver manages  two  devices  related  to  the  main  user
     interface,  the  system  screen and the keyboard.  These two together are
     named "the Console".

  The Screen
     The screen of a PC can be managed by  a  Monochrome  Display  Adapter,  a
     Hercules card, a Color Graphics Adapter, an Enhanced Graphics Adapter, or
     a Video Graphics Array.  To the console driver these devices are seen  as
     a  block  of  video  memory  into  which  characters can be written to be
     displayed, an I/O register that sets  the  video  memory  origin  to  the
     character that is to be displayed on the top-left position of the screen,
     and an I/O register that sets the position of the hardware cursor.   Each
     character  within  video  memory is a two-byte word.  The low byte is the
     character code, and the high byte is the "attribute byte", a set of  bits
     that   controls  the  way  the  character  is  displayed,  character  and
     background colours for  a  colour  card,  or  intensity/underline/reverse
     video for monochrome.

     These are the characteristics of the adapters in text mode:

          Adapter        Usable memory  Mono/Colour
           MDA            4K             M
           Hercules       4K             M
           CGA            16K            C
           EGA            32K            M or C
           VGA            32K            M or C

     MDA and Hercules are the same to the console driver, because the graphics
     mode  of the Hercules is of no use to Minix.  EGA and VGA are also mostly
     seen as the same in text mode.  An EGA adapter is either a monochrome  or
     a  colour  device  depending on the screen attached to it.  A VGA adapter
     can run in either monochrome or colour (grayscale) mode depending on  how
     the Boot Monitor has initialized it.

     The driver uses the video origin to avoid  copying  the  screen  contents
     when  scrolling up or down.  Instead the origin is simply moved one line.
     This is  named  "hardware  scrolling",  as  opposed  to  copying  memory:
     "software scrolling".

     The video origin is also  used  to  implement  several  virtual  consoles
     inside  the  video  memory  of  the adapter.  Each virtual console gets a
     segment of video memory.  The driver chooses which console to display  by
     moving  the  video origin.  Note that an MDA or Hercules adapter can only
     support one console.  CGA can support up to four 80x25 consoles, and  EGA
     and  VGA  can  have  eight.   It is best to configure one less console to
     leave some video memory free so that hardware scrolling has some space to
     work in.

     Character codes are used as indices into a display font that is stored in
     the  adapter.   The  default  font  is the IBM character set, which is an
     ASCII character set in the low 128 codes, and a number  of  mathematical,
     greek,  silly  graphics,  and accented characters in the upper 128 codes.
     This font is fixed in the MDA, Hercules and  CGA  adapters,  but  can  be
     replaced by a user selected font for the EGA and VGA adapters.

     A number of control characters and escape sequences  are  implemented  by
     the  driver.   The  result  is  upward  compatible with the ANSI standard
     terminal.  The termcap(5) type is minix.  Normal  characters  written  to
     the  console  are  displayed  at  the  cursor  position and the cursor is
     advanced one column to the right.  If an entire line is filled  then  the
     cursor wraps to the first column of the next line when the next character
     must be displayed.  The screen is scrolled up if needed to  start  a  new
     line.   Some  characters  have  special effects when sent to the console.
     Some even have arguments in the form of comma separated decimal  numbers.
     These  numbers  default  to  the lowest possible value when omitted.  The
     top-left  character  is  at  position  (1,  1).   The  following  control
     characters and escape sequences are implemented by the console:

     Sequence  Name                Function
      ^@        Null                Ignored (padding character)
      ^G        Bell                Produce a short tone from the speaker
      ^H        Backspace           Move the cursor back one column,  wrapping
                                    from  the  left  edge  up  one line to the
                                    right edge
      ^I        Horizontal Tab      Move to the next tab stop, with  each  tab
                                    stop  at  columns  1, 9, 25, etc.  Wrap to
                                    the next line if necessary.
      ^J        Line Feed           Move one line down, scrolling  the  screen
                                    up if necessary
      ^K        Vertical Tab        Same as LF
      ^L        Form Feed           Same as LF
      ^M        Carriage Return     Move to column 1
      ^[        Escape              Start of an escape sequence
      ^[M       Reverse Index       Move one line  up,  scrolling  the  screen
                                    down if necessary
      ^[[nA     Cursor Up           Move the cursor up n lines
      ^[[nB     Cursor Down         Move the cursor down n lines
      ^[[nC     Cursor Forward      Move the cursor right n columns
      ^[[nD     Cursor Backward     Move the cursor left n columns
      ^[[m;nH   Cursor Position     Move the cursor to line m, column n
      ^[[sJ     Erase in Display    Clear characters as follows:
                                    s = 0: From cursor to end of screen
                                    s = 1: From start of screen to cursor
                                    s = 2: Entire screen
      ^[[sK     Erase in Line       Clear characters as follows:
                                    s = 0: From cursor to end of line
                                    s = 1: From start of line to cursor
                                    s = 2: Entire line
      ^[[nL     Insert Lines        Insert n blank lines
      ^[[nM     Delete Lines        Delete n lines
      ^[[n@     Insert Characters   Insert n blank characters
      ^[[nP     Delete Characters   Delete n characters
      ^[[nm     Character Attribute Set character attribute as follows:
                                    n = 0: Normal (default) attribute
                                    n = 1: Bold (high intensity fg colour)
                                    n = 4: Underline (mono) / Cyan (colour)
                                    n = 5: Blinking
                                    n = 7: Reverse Video
                                    n = 30: Black foreground colour
                                    n = 31: Red
                                    n = 32: Green
                                    n = 33: Brown
                                    n = 34: Blue
                                    n = 35: Magenta
                                    n = 36: Cyan
                                    n = 37: Light Gray
                                    n = 39: Default fg colour (lt gray)
                                    n = 40-47: Same for background colour
                                    n = 49: Default bg colour (black)
                                    Note: The "bold" versions of black,  brown
                                    and  lt  gray become dark gray, yellow and

     The console device implements the following ioctl to  copy  a  font  into
     font memory on EGA and VGA adapters:

          ioctl(fd, TIOCSFON, u8_t font[256][32]);

     Font memory consists  of  256  character  definitions  of  32  lines  per
     character  and  8 pixels per line.  The first line is the topmost line of
     the character.  The leftmost pixel is lit if the most significant bit  of
     a line is set, etc.  How many lines are used depends on the current video
     mode.  The 80x25 video mode used by Minix has  an  8x16  character  cell,
     80x28  has 8x14 characters, and 132x43 or 132x50 has 8x8 characters.  The
     boot variable console is used by both the Boot Monitor  and  the  console
     driver  to  set the video mode, software scrolling on/off, and VGA screen
     blank timeout.  See boot(8).

  The Keyboard
     The keyboard produces key codes for each key that is pressed.  These keys
     are  transformed  into  character  codes  or  sequences  according to the
     current  keyboard  translation  table.   The  format  of  this  table  is
     described in keymap(5).  The character codes can be read from the console
     device unless they map to special hotkeys.  The hotkeys are as follows:

     Name             Key Function
      CTRL-ALT-DEL     Send an abort signal to process 1  (init).   Init  then
                       halts the system
      CTRL-ALT-KP-.    Likewise for keypad period
      F1               Process table dump
      F2               Show memory map
      F3               Toggle software/hardware scrolling
      F5               Show network statistics
      CTRL-F7          Send a quit signal to all processes  connected  to  the
      CTRL-F8          Send an interrupt signal
      CTRL-F9          Send a kill signal.  If CTRL-F8 or  CTRL-F7  don't  get
                       'em,  then  this  surely  will.   These  keys  are  for
                       disaster recovery.  You  would  normally  use  DEL  and
                       CTRL-\ to send interrupt and quit signals.
      ALT-F1           Select virtual console 0 (/dev/console)
      ALT-F2           Select virtual console 1 (/dev/ttyc1)
      ALT-F(n+1)       Select virtual console n (/dev/ttycn)
      ALT-Left         Select previous virtual console
      ALT-Right        Select next virtual console

     The keyboard map is set with the KIOCSMAP ioctl whose precise details are
     currently hidden in the loadkeys utility.

  Log device
     The log device can be used by processes to print debug messages onto  the
     console.   The  console  is  a  terminal type device, so it is taken from
     processes when a session leader exits.  This does not happen with the log

     tty(4), loadkeys(1), keymap(5), boot(8).

     Output processing turns Line Feeds into CR LF sequences.  Don't let  this
     surprise  you.   Either  turn  off  output  processing  or use one of the
     synonyms for LF.

     Kees J. Bot (