Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ display(7) — Interactive 3.2r4.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

stty(1)

ioctl(2)

console(7)

keyboard(7)

termio(7)

display(7)  —  

NAME

display − video adapter display

DESCRIPTION

The video adapter display (and user’s terminal) is composed of two separate pieces: the keyboard (see keyboard(7)) and the display. Because of their complexity, and because there are three possible display interfaces (monochrome, color graphics, and enhanced graphics adapters), they are discussed in separate manual entries.

The display normally consists of 25 lines of 80 columns each; 40-column lines are also supported by the color/graphics adapter, and 43 lines of 80-columns each are supported by the enhanced graphics adapter.  If the console refers to a video adapter, then writing characters to the console or one of its virtual screens (/dev/console or /dev/vtxx) has an effect which depends on the characters.  All characters written to /dev/console are first processed by the terminal interface (see termio(7)). For example, mapping new-line characters to carriage return plus new-line, and expanding tabs to spaces, will be done before the following processing:

x Where x is not one of the following, displays x. 

BEL Generates a bell (audible tone, no modulation). 

CR Places the cursor at column 1 of the current line. 

LF, VT Places the cursor at the same column of the next line (scrolls if the current line is line 25). 

FF Clears the screen and places the cursor at line 1, column 1. 

BS Depends on the previous character: if an _ (underscore), see below; otherwise, if the cursor is not at column 1, it is moved to the left one position on the same line.  If the cursor is at column 1, it is not moved. 

_BSx Sets the underscore attribute for the character x to be displayed.  The underscore attribute for the color/graphics adapter is a red background with a white foreground. 

ESCx Where x is any of the 256 possible codes (except c, [, and H), displays that value uninterpreted.  This is useful for utilizing the full set of graphics available on the display.  Note again that the characters are processed through the terminal interface prior to this escape sequence.  Therefore, to get some of the possible 256 characters, it is necessary that the character not be postprocessed.  The easiest way to accomplish this is to turn off OPOST in the c_oflag field (see termio(7)); however, this may have other side effects. 

The display can be controlled by means of ANSI X3.64 escape sequences, which are specific sequences of characters, preceded by the ASCII character ESC.  The escape sequences, which work on either the monochrome, color graphics, or enhanced graphics adapter, are the ­following:

ESCc Clears the screen and places the cursor at line 1, column 1. 

ESCH Sets a tab stop at the current cursor position.  This escape sequence will be ignored if a tab is already set. 

ESC Q n ’string’
Defines the function key n with string.  The string ­delimiter ’ may be any character not in string.  Function keys are numbered 0 through 11 (F1 = 0, F2 = 1, etc.). 

ESC[ n @ Insert character—inserts n blanks at the current cursor ­position. 

ESC[ n ` Horizontal Position Absolute − moves active position to column given by n. 

ESC[ n A Cursor up − moves the cursor up n lines (default: n=1). 

ESC[ n a Horizontal Position Relative − moves active position n characters to the right (default: n=1). 

ESC[ n B Cursor down − moves the cursor down n lines (default: n=1). 

ESC[ n C Cursor right − moves the cursor right n columns (default: n=1). 

ESC[ n D Cursor left − moves the cursor left n columns (default: n=1). 

ESC[ n d Vertical Position Absolute − moves active position to line given by n. 

ESC[ n E Cursor next line − moves the cursor to column 1 of the next line, then down n−1 lines (default: n=1). 

ESC[ n e Vertical Position Relative − moves the active position down n lines (default: n=1). 

ESC[ n F Cursor previous line − moves the cursor to column 1 of the current line, then up n lines (default: n=1). 

ESC[ n G Cursor horizontal position − moves the cursor to column n of the current line (default: n=1). 

ESC[ n ; m H Position cursor − moves the cursor to column m of line n (default: n=1, m=1). 

ESC[ n ; m f Position cursor − moves the cursor to column m of line n (default: n=1, m=1). 

ESC[ n J Erase window − erases from the current cursor position to the end of the window if n=0, from the beginning of the window to the current cursor position if n=1, and the entire window if n=2 (default: n=0). 

ESC[ n K Erase line − erases from the current cursor position to the end of the line if n=0, from the beginning of the line to the current cursor position if n=1, and the entire line if n=2 (default: n=0). 

ESC[ n L Insert line − inserts n lines at the current cursor position (default: n=1). 

ESC[ n M Delete line − deletes n lines starting at the current cursor position (default: n=1). 

ESC[ n P Delete character − deletes n characters from a line starting at the current cursor position (default: n=1). 

ESC[ n S Scroll up − scrolls the characters in the current window up n lines.  The bottom n lines are cleared to blanks (default: n=1). 

ESC[ n T Scroll down − scrolls the characters in the current window down n lines.  The top n lines are cleared to blanks (default: n=1). 

ESC[ n X Erase character − erases n character positions starting at the current cursor position (default: n=1). 

ESC[ n Z Cursor Backward Tabulation − moves active position back n tab stops. 

ESC[ 2 h Locks the keyboard and ignores keyboard input until unlocked.  Characters are not saved. 

ESC[ 2 i Sends the screen to the host.  The current screen display is sent to the application. 

ESC[ 2 l Unlocks the keyboard.  Re-enables keyboard input. 

ESC[ ? 7 h Disables the no-wrap flag, causing characters typed after column 80 to continue on the next line. 

ESC[ ? 7 l Sets the no-wrap flag, causing characters typed after column 80 to remain at column 80. 

ESC[ n g Delete tab stop − removes the tab stop at the current cursor position if n=0, removes all tab stops if n=3 (default: n=0). 

ESC[ Ps ; Ps; ... m
Character attributes − each Ps is one of the following characters; multiple characters are separated by semicolons.  These parameters apply to successive characters being displayed, in an additive manner (e.g., both bold and underscoring can be selected).  Only the parameters through 7 apply to the monochrome adapter; all parameters apply to the color/graphics adapter and the enhanced graphics adapter (default: Ps=0). 

Ps Meaning
0 all attributes off (normal display)
(white foreground with black background)
1 bold intensity
4 underscore on
(white foreground with red background on color)
5 blink on
7 reverse video
30 black (gray) foreground
31 red (light red) foreground
32 green (light green) foreground
33 brown (yellow) foreground
34 blue (light blue) foreground
35 magenta (light magenta) foreground
36 cyan (light cyan) foreground
37 white (bright white) foreground
40 black (gray) background
41 red (light red) background
42 green (light green) background
43 brown (yellow) background
44 blue (light blue) background
45 magenta (light magenta) background
46 cyan (light cyan) background
47 white (bright white) background
ESC[ 3 Cm Set foreground color C where C represents the color defined in Table 1 below. 
ESC[ 4 Cm Set backgound color C where C represents the color defined in Table 1 below. 
ESC[ 8 m sets blank (non-display)
ESC[ 10 m selects the primary font
ESC[ 11 m selects the first alternate font; lets ASCII characters less than 32 be displayed as ROM ­characters
ESC[ 12 m selects a second alternate font; toggles high bit of extended ASCII code before displaying as ROM characters
ESC[=cF Set normal foreground color to c where c represents a color defined in Table 2 below. 
ESC[=cG Set normal background color to c where c represents a color defined in Table 1 below. 
ESC[=cH Set reverse foreground color to c where c represents a color defined in Table 2 below. 
ESC[=cI Set reverse background color to c where c represents a color defined in Table 2 below. 
ESC[=cJ Set graphic foreground color to c where c represents a color defined in Table 2 below. 
ESC[=cK Set graphic background color to c where c represents a color defined in Table 2 below. 
ESC[=cA Set the overscan (border) color to c where c represents a color defined in Table 2 below. 
TABLE 1
C Color
0 Black
1 Red
2 Green
3 Yellow
4 Blue
5 Magenta
6 Cyan
7 White
TABLE 2
C Color C Color
0 Black 8 Grey
1 Blue 9 Lt. Blue
2 Green 10 Lt. Green
3 Cyan 11 Lt. Cyan
4 Red 12 Lt. Red
5 Magenta 13 Lt. Magenta
6 Brown 14 Yellow
7 White 15 Lt. White

Note that for character attributes 30-37, the color selected for foreground will depend on whether the bold intensity attribute (1) is currently on.  If not, the first color listed will result; otherwise the second color listed will result. 

Similarly, for character attributes 40-47, the color selected for background will depend on whether the blink attribute (5) is currently on.  If the blink attribute is not on, then the first color listed will result.  If the blink attribute is on, then the second color listed will result. 

Ioctl Calls

The following ioctl calls can be used to change the display used for the video monitor:

SWAPMONO
This call selects the monochrome adapter as the output ­device for the system console.

SWAPCGA
This call selects the color/graphics adapter as the output ­device for the system console.

SWAPEGA
This call selects the enhanced graphics adapter as the output ­device for the system console.

SWAPVGA
This call selects the video graphics array adapter as the output ­device for the system console.

The following ioctl call may be used to obtain more information about the display adapter currently attached to the video monitor:

CONS_CURRENT
This call returns the display adapter type currently attached to the video monitor. The return value can be one of: MONO, CGA, EGA, or VGA. 

The following ioctl calls may be used to switch display modes on the various video adapters:

SW_B40x25
This call selects 40x25 (40 columns by 25 rows) black and white text display mode. It is valid only for CGA, EGA, and VGA ­devices. 

SW_C40x25
This call selects 40x25 (40 columns by 25 rows) color text display mode. It is valid only for CGA, EGA, and VGA ­devices. 

SW_B80x25
This call selects 80x25 (80 columns by 25 rows) black and white text display mode. It is valid only for CGA, EGA, and VGA ­devices. 

SW_C80x25
This call selects 80x25 (80 columns by 25 rows) color text display mode. It is valid only for CGA, EGA, and VGA ­devices. 

SW_BG320
This call selects 320x200 black and white graphics display mode. It is valid only for CGA, EGA, and VGA ­devices. 

SW_CG320
This call selects 320x200 color graphics display mode. It is valid only for CGA, EGA, and VGA ­devices. 

SW_BG640
This call selects 640x200 black and white graphics display mode. It is valid only for CGA, EGA, and VGA ­devices. 

SW_CG320_D
This call selects EGA support for 320x200 graphics display mode (EGA mode D).  It is valid only for EGA and VGA ­devices. 

SW_CG640_E
This call selects EGA support for 640x200 graphics display mode (EGA mode E).  It is valid only for EGA and VGA ­devices. 

SW_EGAMONOAPA
This call selects EGA support for 640x350 graphics display mode (EGA mode F).  It is valid only for EGA and VGA ­devices. 

SW_ENH_MONOAPA2
This call selects EGA support for 640x350 graphics display mode with extended memory (EGA mode F*).  It is valid only for EGA and VGA ­devices. 

SW_CG640x350
This call selects EGA support for 640x350 graphics display mode (EGA mode 10).  It is valid only for EGA and VGA ­devices. 

SW_ENH_CG640
This call selects EGA support for 640x350 graphics display mode with extended memory (EGA mode 10*).  It is valid only for EGA and VGA ­devices. 

SW_EGAMONO80x25
This call selects EGA monochrome text display mode (EGA mode 7), which emulates support provided by the monochrome adapter.  It is valid only for EGA and VGA ­devices. 

SW_ENHB40x25
This call selects enhanced 40x25 black and white text display mode. It is valid only for EGA and VGA ­devices. 

SW_ENHC40x25
This call selects enhanced 40x25 color text display mode. It is valid only for EGA and VGA ­devices. 

SW_ENHB80x25
This call selects enhanced 80x25 black and white display mode. It is valid only for EGA and VGA ­devices. 

SW_ENHC80x25
This call selects enhanced 80x25 color text display mode. It is valid only for EGA and VGA ­devices. 

SW_ENHB80x43
This call selects enhanced 80x43 black and white text display mode. It is valid only for EGA and VGA ­devices. 

SW_ENHC80x43
This call selects enhanced 80x43 color text display mode. It is valid only for EGA and VGA ­devices. 

SW_MCAMODE
This call reinitializes the monochrome adapter. It is valid only for monochrome adapters.

SW_VGA_B132x25
This call selects enhanced 132x25 black and white text display mode.  It is valid only on Sigma VGA/H adapters with 132 column ­support. 

SW_VGA_C132x25
This call selects enhanced 132x25 color text display mode.  It is valid only on Sigma VGA/H adapters with 132 column ­support. 

SW_VGA_B132x43
This call selects enhanced 132x43 black and white text display mode.  It is valid only on Sigma VGA/H adapters with 132 column ­support. 

SW_VGA_C132x43
This call selects enhanced 132x43 color text display mode.  It is valid only on Sigma VGA/H adapters with 132 column ­support. 

SW_VGAMONOAPA
This call selects VGA support for 640x350 monochrome graphics display support (VGA mode F+).  It is valid only for VGA devices. 

SW_VGA_CG640
This call selects VGA support for 640x350 color graphics display support (VGA mode 10+).  It is valid only for VGA devices. 

SW_VGA_B40x25
This call selects VGA support for VGA 40x25 (40 columns by 25 rows) black and white text display mode.  It is valid only for VGA devices. 

SW_VGA_C40x25
This call selects VGA support for VGA 40x25 (40 columns by 25 rows) color text display mode.  It is valid only for VGA devices. 

SW_VGAB80x25
This call selects VGA support for VGA 80x25 (80 columns by 25 rows) black and white text display mode.  It is valid only for VGA devices. 

SW_VGAC80x25
This call selects VGA support for VGA 80x25 (80 columns by 25 rows) color text display mode.  It is valid only for VGA devices. 

SW_VGAMONO80x25
This call selects VGA monochrome text display mode (VGA mode 7+).  It is valid only for VGA devices. 

SW_BG640x480
This call selects VGA 640x480 black and white graphics display mode (VGA mode 11).  It is valid only for VGA ­devices. 

SW_CG640x480
This call selects VGA 640x480 color graphics display mode (VGA mode 12).  It is valid only for VGA devices. 

SW_VGA_CG320
This call selects VGA 320x200 color graphics display mode (VGA mode 13).  It is valid only for VGA devices. 

Switching to an invalid display mode for a display ­device will result in an error. 

The following ioctls may be used to obtain information about the current display modes:

CONS_GET
This call returns the current display mode setting for whatever display adapter is being used. Possible return values include:

DM_B40x25 (0), black and white 40 columns.  CGA and EGA only. 

DM_C40x25 (1), color 40 columns.  CGA and EGA only. 

DM_B80x25 (2), black and white 80 columns.  CGA and EGA only. 

DM_C80x25 (3), color 80 columns.  CGA and EGA only. 

DM_BG320 (4), black and white graphics 320x200.  CGA and EGA only. 

DM_CG320 (5), color graphics 320x200.  CGA and EGA only. 

DM_BG640 (6), black and white graphics 640x200 high-resolution.  CGA and EGA only. 

DM_EGAMONO80x25 (7), EGA-mono 80x25.  EGA only. 

DM_ENH_B80x43 (10), EGA enhanced black and white 80x43. 

DM_ENH_C80x43 (11), EGA enhanced color 80x43. 

DM_CG320_D (13), EGA mode D. 

DM_CG640_E (14), EGA mode E. 

DM_EGAMONOAPA (15), EGA mode F. 

DM_CG640x350 (16), EGA mode 10. 

DM_ENHMONOAPA2 (17), EGA mode F with extended memory. 

DM_ENH_CG640 (18), EGA mode 10*. 

DM_ENH_B40x25 (19), EGA enhanced black and white 40 columns. 

DM_ENH_C40x25 (20), EGA enhanced color 40 columns. 

DM_ENH_B80x25 (21), EGA enhanced black and white 80 columns. 

DM_ENH_C80x25 (22), EGA enhanced color 80 columns. 

DM_VGA_C40x25 (23), VGA color 40x25. 

DM_VGA_C80x25 (24), VGA color 80x25. 

DM_VGAMONO80x25 (25), VGA mode 7+. 

DM_BG640x480 (26), VGA black and white graphics 640x480 (VGA mode 11). 

DM_CG640x480 (27), VGA color graphics 640x480 (VGA mode 12). 

DM_VGA_CG320 (28), VGA color graphics 320x200 (VGA mode 13). 

DM_VGA_B40x25 (29), VGA black and white 40x25. 

DM_VGA_B80x25 (30), VGA black and white 80x25. 

DM_VGAMONOAPA (31), VGA mode F+. 

DM_VGA_CG640 (32), VGA mode 10+. 

DM_VGA_B132x25 (35), VGA enhanced black and white 132x25. 

DM_VGA_C132x25 (36), VGA enhanced color 132x25. 

DM_VGA_B132x43 (37), VGA enhanced black and white 132x43. 

DM_VGA_C132x43 (38), VGA enhanced color 132x43. 

M_MCA_MODE (0xff), monochrome adapter mode. 

MCA_GET
This call returns the current display mode setting of the monochrome adapter. See CONS_GET for a list of return values.  If the monochrome adapter is not installed, the call will fail and erno will be set to 22 (EINVAL). 

CGA_GET
This call returns the current display mode setting of the color/graphics adapter. See CONS_GET for a list of return values.  If the color graphics adapter is not installed, the call will fail and erno will be set to 22 (EINVAL). 

EGA_GET
This call returns the current display mode setting of the enhanced graphics adapter. See CONS_GET for a list of return values.  If the enhanced graphics adapter is not installed, the call will fail and erno will be set to 22 ­(EINVAL). 

VGA_GET
This call returns the current display mode setting of the video graphics array adapter. See CONS_GET for a list of return values.  If the video graphics array adapter is not installed, the call will fail and erno will be set to 22 ­(EINVAL). 

The following ioctl calls may be used to map the video adapter’s memory into the user’s data space:

MAPCONS
This call maps the display memory of the adapter currently being used into the user’s data space. It uses the first available memory after the end of the user process’ data region.  This is the same area that MALLOC uses to allocate memory.  Use KDMAPDISP instead. 

MAPMONO
This call maps the monochrome adapter’s display memory into the user’s data space.

MAPCGA
This call maps the color/graphics adapter’s display memory into the user’s data space.

MAPEGA
This call maps the enhanced graphics adapter’s display memory into the user’s data space.

MAPVGA
This call maps the video graphics array adapter’s display memory into the user’s data space.

You can use ioctl calls to input a byte from the graphics adapter port or to output a byte to the graphics adapter port.  The argument to the ioctl uses the port_io_arg data structure:

struct port_io_arg {
struct port_io_struc_args[4];
};

As shown in the previous example, the port_io_arg structure points to an array of four port_io_struc data structures.  The port_io_struc has the following format:

struc port_io_struc {
char dir;/* direction flag (in vs. out) */
unsigned short port; /* port address */
char data;/* byte of data */
};

You can specify one, two, three, or four of the port_io_struc structures in the array for one ioctl call.  The value of dir can be either IN_ON_PORT (to specify a byte being input from the graphics adapter port) or OUT_ON_PORT (to specify a byte being output to the graphics adapter port).  Port is an integer specifying the port address of the desired graphics adapter port.  Data is the byte of data being input or output as specified by the call.  If you are not using any of the port_io_struc structures, load the port with 0, and leave the unused structures at the end of the array.  Refer to your hardware manuals for port addresses and functions for the various adapters. 

The following ioctl calls may be used to input or output bytes on the graphics adapter port:

MCAIO This call inputs or outputs a byte on the monochrome adapter port as specified. 

CGAIO This call inputs or outputs a byte on the color/graphics adapter port as specified. 

EGAIO This call inputs or outputs a byte on the enhanced graphics adapter port as specified. 

VGAIO This call inputs or outputs a byte on the video graphics array adapter port as specified. 

To input a byte on any of the graphics adapter ports, load dir with IN_ON_PORT and load port with the port address of the graphics adapter.  The byte input from the graphics adapter port will be returned in data. 

To output a byte, load dir with OUT_ON_PORT, load port with the port address of the graphics adapter, and load data with the byte you want to output to the graphics adapter port. 

The following ioctls can be used with either the monochrome, color graphics, or enhanced graphics adapters:

KDDISPTYPE
This call returns display information to the user. The argument expected is the buffer address of a structure of type kd_disparam into which display information is returned to the user.  The kd_disparam structure is defined as follows:

struct kd_disparam {
long type;/* display type */
char *addr;/* display memory address */
ushort ioaddr[MKDIOADDR]; /* valid I/O addresses */
}

Possible values for the type field include:

KD_MONO (0x01)IBM monochrome display adapter
KD_HERCULES (0x02) Hercules monochrome graphics adapter
KD_CGA (0x03)IBM color graphics adapter
KD_EGA (0x04)IBM enhanced graphics adapter
KD_VGA (0x05)VGA adapter

The addr member indicates the physical address of the display.  It will be one of:

MONO_BASE0xb0000
COLOR_BASE0xb8000
EGA_BASE0xa0000

The ioaddr member contains the global keyboard/display port list that is used for direct ins and outs to the screen. When using a VGA display, the result of a KDISPTYPE ioctl is the same as with an EGA display. 

KIOCSOUND
This call starts the sound generation. It turns on sound. The argument is the inverse frequency desired. A value of 0 turns off the sound.

KDGETLED
This call gets the keyboard LED status.  The argument is a pointer to a character.  The character will be filled with a boolean combination of the following values:

LED_SCR0x01 (flag bit for scroll lock)
LED_CAP0x04 (flag bit for caps lock)
LED_NUM0x02 (flag bit for num lock)

KDSETLED
This call sets the keyboard LED status.  The argument is a character whose value is the boolean combination of the values listed under KDGETLED. 

KDMKTONE
This call generates a fixed length tone. The argument is a 32-bit value, with the lower 16 bits set to the inverse frequency and the upper 16 bits set to the duration (in milliseconds).

KDGKBTYPE
This call gets keyboard type. The argument is a pointer to a character type. The character will be returned with one of the following values:

KB_840x01 (84-key keyboard)
KB_1010x02 (101-key keyboard)
KB_OTHER0x03

KDADDIO
This call adds the I/O port address to the list of valid video adapter addresses.  Argument is an unsigned short type which should contain a valid port address for the installed video adapter. 

KDDELIO
This call deletes the I/O port address from the list of valid video adapter addresses.  Argument is an unsigned short type which should contain a valid port address for the installed video adapter. 

KDENABIO
This call enables ins and outs to video adapter ports. No ­argument.

KDDISABIO
This call disables ins and outs to video adapter ports. No ­argument.

KDSBORDER
This call sets the screen color border in EGA text mode.  The argument is of type character.  Each bit position corresponds to a color selection.  From bit position 0 to bit position 6, the color selections are respectively blue, green, red, secondary blue, secondary green, and secondary red.  Setting the bit position to a logic one will select the desired color or colors. 

KDSCROLL
This call is used to set the hardware scrolling feature to be on or off. Most CGA, EGA, and VGA displays provide hardware-assisted scrolling for better output performance.  The default is hardware scrolling turned off.  A nonzero argument enables scrolling; a zero argument disables it. 

KDSETMODE
This call sets the mode of the display driver to the integer argument given. The modes that may be specified are:

KD_TEXT00x00
KD_GRAPHICS0x01
KD_TEXT10x02

KD_TEXT is a synonym for KD_TEXT0. 

KD_TEXT0 indicates that all text on the display must be written with the write system call.  The display will automatically be saved and restored on “hot key” screen switches.  Upon leaving KD_TEXT0 mode, the display contents will be saved; upon returning to KD_TEXT0 mode, the display will be restored from the saved display.  KD_TEXT1 works in the same manner as KD_TEXT0, except that the display is not restored when the user returns to KD_TEXT1 mode. 

KD_GRAPHICS mode indicates that the user will have direct control of the display.  It will be necessary to map in the display using the KDMAPDISP ioctl subsequent to setting KD_GRAPHICS mode to store characters directly onto the display.  In this mode, all writes to the display using the write system call are ignored.  In KD_GRAPHICS mode, the user is responsible for saving and restoring the display on “hot key” switches.  This requires that the virtual terminal must be in process (VT_PROCESS) mode prior to setting KD_GRAPHICS mode. 

In KD_GRAPHICS mode, there will not necessarily be graphics on the display.  When setting KD_TEXT0 or KD_TEXT1 mode, the ioctl will fail if the display is mapped in [EIO].  When setting KD_GRAPHICS mode, the ioctl will fail if the virtual terminal is not in process (VT_PROCESS) mode [EACCES]. 

KDGETMODE
This call gets the current mode of the console. It returns an integer argument containing KD_TEXT, KD_TEXT1, or KD_GRAPHICS as defined in the KDSETMODE ioctl ­description. 

KDMAPDISP
This call allows one to have direct access to the display and I/O ports.  It is especially useful in providing a way to do nonportable but fast graphics on the display.  The following structure, defined in <sys/kd.h>, is pointed to by the argument to the ioctl:

struct kd_memloc {
char*vaddr;/∗ virtual address to map to∗/
char*physaddr; /∗ physical address to map from ∗/
longlength;/∗ size in bytes to map ∗/
longioflg;/∗ enable I/O addresses if non-zero ∗/
};

The vaddr argument is the linear address in the process where the display buffer will appear.  This address must be on a page (4K byte) boundary.  The physaddr argument is the physical address of the screen.  It must be between 0xA0000 and 0xC0000.  It must also be on a page boundary.  The length argument is the size of the display buffer that will be mapped in.  It must be a multiple of 4K bytes.  The ioflg argument tells whether (1) or not (0) to enable the global keyboard/display ports for direct access to the I/O ports similar to the KDENABIO and KDDISABIO ioctl.

The memory that had existed at address vaddr for length bytes will be irretrievably deleted, and the current contents of the display buffer will be placed at those locations.  It is necessary for the virtual terminal to be in process (VT_PROCESS) mode and for the display ­device to be in KD_GRAPHICS mode.  One way of allocating the virtual memory in the user’s address space that will be mapped to the screen is to call ­malloc requesting (length + 4096) bytes.  Then using the address that malloc returns, round it up to the next page (4K byte) boundary and use the result as vaddr.

The ioctl will fail if the virtual terminal is not in process mode or if the display is not in KD_GRAPHICS mode [EACCES].  It will fail if any of the arguments are out of range or not properly aligned [EFAULT].  It will fail if the display is already mapped to [EIO]. 

KDUNMAPDISP
This call unmaps the direct access to the display and disables the direct usage of the I/O ports.  The map must have been set up with KDMAPDISP by the current process.  The memory where the display had been becomes zeroes.  The ioctl will fail if the current process is not the one that did the mapping [EACCES]. 

VT_OPENQRY
This call finds an available virtual terminal. The argument is a pointer to a long. The long will be filled with the number of the first available “VT” that no other process has open, or −1 if none are available. 

VT_GETMODE
This call determines what mode the active virtual terminal is currently in, either VT_AUTO or VT_PROCESS. The argument to the ioctl is the address of the following type of ­structure:

struct vt_mode {
charmode;/* VT mode */
charwaitv;/* if set, hang on writes when not active */
shortrelsig;/* signal to use for release request */
shortacqsig;/* signal to use for display acquired */
shortfrsig;/* signal to use for forced release */
}
#define VT_AUTO0x00 /* automatic VT switching */
#define VT_PROCESS0x01 /* process controls switching */

The vt_mode structure will be filled in with the current value for each field. 

VT_SETMODE
Set the virtual terminal mode. The argument is a pointer to a vt_mode structure, as defined above. 

VT_RELDISP
This call is used to tell the virtual terminal manager that the display has or has not been released by the process. A non-zero argument indicates that the display has been released; a zero argument indicates refusal to release the display.

VT_ACTIVATE
This call makes the virtual terminal number specified in the argument the active VT.  The VT manager will cause a switch to occur in the same manner as if a hotkey sequence had been typed at the keyboard.  If the specified VT is not open or does not exist, the call will fail and errno will be set to ENXIO. 

KIOCINFO
This call tells the user what the ­device is.

GIO_SCRNMAP
This call gets the screen mapping table from the kernel.

GIO_ATTR
This call returns the current screen attribute. The bits are interpreted as follows:

Bit 0 determines underlining for black and white monitors (1=underlining on). 

Bits 0-2, for color monitors only, select the foreground color.  The following list indicates what colors are selected by the given value:

The value 0 selects black.
The value 1 selects red.
The value 2 selects green.
The value 4 selects blue.
The value 5 selects magenta.
The value 6 selects cyan.
The value 7 selects white.

Bit 3 is the intensity bit ( 1=blink on). 

Bits 4-6, for color monitors only, select the background color.  For a list of colors and their values, see the list under foreground colors. 

Bit 7 is the blink bit (1=blink on). 

GIO_COLOR
This call returns zero if the current display is a color display; otherwise, it returns a non-zero value.

PIO_SCRNMAP
This call puts the screen mapping table in the kernel.

The screen mapping table maps extended ASCII (8-bit) characters to ROM characters.  It is an array [256] of char (typedef scrnmap_t) and is indexed by extended ASCII values.  The value of the elements of the array are the ROM character to display. 

For example, the following program will cause the ASCII character # to be displayed as an English pound sign:

#include <sys/types.h>
#include <sys/at_ansi.h>
#include <sys/kd.h>
main() {
scrnmap_t scrntab;
/* get screen mapping table of standard output */
if (ioctl(0,GIO_SCRNMAP, scrntab)==−1)
{
perror("screenmap read");
exit(-1);
}
/* 156 is the ROM value of English pound sign and 30
    is the ASCII value of ‘#’.
*/
scrntab[30] = 156;
if (ioctl(0, PIO_SCRNMAP, scrntab) == −1)
{
perror("screenmap write");
exit(-1);
}
}

FILES

/dev/console
/dev/vt00-n
/usr/include/sys/kd.h

SEE ALSO

stty(1), ioctl(2), console(7), keyboard(7), termio(7). 

WARNINGS

Although it is possible to write character sequences which set arbitrary bits on the screen in any of the three graphics modes, this mode of operation is not currently supported. 

It is currently not possible to access the 6845 start address registers.  Thus, it is impossible to determine the beginning of the color monitor’s screen memory. 

The alternate/background color bit (bit 4) of the color select register does not appear to affect background colors in alphanumeric modes. 

The low-resolution graphics mode appears to be 80 across by 100 down. 

ADDED VALUE

This entry, supplied by SunSoft, Inc., contains enhancements to UNIX System V. 

\*U  —  Version 1.0

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026