NAME
console, keyboard, log - system console
DESCRIPTION
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 char-
acter 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 3.
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 depend-
ing 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 vir-
tual 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 char-
acter 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 back-
ground colour
n = 49: Default bg colour
(black)
Note: The "bold" versions of
black, brown and lt gray
become dark gray, yellow and
white.
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 3 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 fol-
lows:
Name KeyFunction
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 con-
nected to the console
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 pre-
cise details are currently hidden in the loadkeys utility.
Log device
The log device can be used by processes to print debug mes-
sages onto the console. The console is a terminal type dev-
ice, so it is taken from processes when a session leader
exits. This does not happen with the log device.
SEE ALSO
tty(4), loadkeys(1), keymap(5), boot(8).
NOTES
Output processing turns Line Feeds into CR LF sequences.
Don't let this surprise you. Either turn off output pro-
cessing or use one of the synonyms for LF.
AUTHOR
Kees J. Bot (kjb@cs.vu.nl)