VGA text mode was introduced in 1987 by IBM as part of the VGA standard for its IBM PS/2 computers. Its use on IBM PC compatibles was widespread through the 1990s and persists today for some applications on modern computers. The main features of VGA text mode are colored (programmable 16-color palette) characters and their background, blinking, various shapes of the cursor (block/underline/hidden static/blinking), and loadable fonts (with various glyph sizes). The Linux console traditionally uses hardware VGA text modes, and the Win32 console environment has an ability to switch the screen to text mode for some text window sizes.
Distinctive features of VGA text as it is commonly used:
Light gray background (normally not white). Box-drawing. Variousback-/foregroundcombinations. Custom/non-ASCII characters CGA–EGA-style 16-color palette for foreground.Blinking text.
Cursor.
Data arrangement Text buffer Each screen character is represented by two bytes aligned as a 16-bit word accessible by the CPU in a single operation. The lower (or character) byte is the actual code point for the current character set, and the higher (or attribute) byte is a bit field used to select various video attributes such as color, blinking, character set, and so forth. This byte-pair scheme is among the features that the VGA inherited from the EGA, CGA, and ultimately from the MDA. Attribute Character 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 Blink Background color Foreground color Code point
Depending on the mode setup, attribute bit 7 may be either the blink bit or the fourth background color bit (which allows all 16 colors to be used as background colors). Attribute bit 3 (foreground intensity) also selects between fonts A and B (see below). Therefore, if these fonts are not the same, this bit is simultaneously an additional code point bit. Attribute bit 0 also enables underline, if certain other attribute bits are set to zero (see below).
Colors are assigned in the same way as in 4-bit indexed color graphic modes (see VGA color palette). VGA modes have no need for the MDA's reverse and bright attributes because foreground and background colors can be set explicitly.
Underline The VGA hardware has the ability to enable an underline on any character that has attribute bit 0 set. However, since this is an MDA-compatible feature, the attribute bits not used by the MDA must be set to zero or the underline will not be shown. This means that only bits 3 (intensity) and 7 (blink) can be set concurrently with bit 0 (underline). "Table 6. Sample cursor shapes, Base video port address, Internal mode bits, Screen attribute bit 7 role, Byte for internal mode register at port 3D8h (CGA), 3B8h (MDA) and virtual (EGA/VGA)" With the default VGA palette, setting bit 0 to enable underline will also change the text color to blue. This means text in only two colors can be underlined (5555FF and 0000AA with the default palette).
Despite all this, the underline is not normally visible in color modes, as the location of the underline defaults to a scanline below the character glyph, rendering it invisible. If the underline location is set to a visible scanline (as it is by default when switching to an MDA-compatible monochrome text mode), then the underline will appear.
Fonts
Screen fonts used in EGA and VGA are monospace raster fonts containing 256 glyphs, and 2 fonts may be used simultaneously, for a total of 512 glyphs. All glyphs on screen are the same size, but that size is variable. Typically, glyphs are 8 dots wide and 8–16 dots high, however the height can be any value up to a maximum of 32. Each row of a glyph is coded in an 8-bit byte, with high bits to the left of the glyph and low bits to the right. Along with several hardware-dependent fonts stored in the adapter's ROM, the text mode offers 8 loadable fonts. Two active font pointers (font A and font B) select two of the available fonts, although they usually point to the same font. When they each point to different fonts, attribute bit 3 (see above) acts as a font selection bit instead of as a foreground color bit. On real VGA hardware, this overrides the bit's use for color selection, but on many clones and emulators, the color selection remains – meaning one font is displayed as normal intensity, and the other as high-intensity. This difference (and incompatibility) can be overcome by changing the palette registers to contain two copies of an 8-color palette. A VGA-capable video card must implement ASCII characters in its Video BIOS; VGA text fonts of other European languages, such as German and Russian, may be defined in other code pages.
There are modes with a character box width of 9 dots (e.g. the default 80×25 mode), however the 9th column is used for spacing between characters, so the content cannot be changed. It is always blank, and drawn with the current background color. An exception to this is in Line Graphics Enable mode, which causes code points 0xC0 to 0xDF inclusive to have the 8th column repeated as the 9th. These code points cover those box-drawing characters which must extend all the way to the right side of the glyph box. For this reason, placing letter-like characters in code points 0xC0–0xDF should be avoided. The box-drawing characters from 0xB0 to 0xBF are not extended, as they do not point to the right and so do not require extending.
Cursor
The shape of the cursor is restricted to a rectangle the full width of the character box, and filled with the foreground color of the character at the cursor's current location. Its height and position may be set to anywhere within a character box;. The EGA and many VGA clones allowed a split-box cursor (appearing as two rectangles, one at the top of the character box and one at the bottom), by setting the end of the cursor before the start, however if this is done on the original VGA, the cursor is completely hidden instead. The VGA standard does not provide a way to alter the blink rate, although common workarounds involve hiding the cursor and using a normal character glyph to provide a so-called software cursor.
A mouse cursor in TUI (when implemented) is not usually the same thing as a hardware cursor, but a moving rectangle with altered background or a special glyph.
Some text-based interfaces, such as that of Impulse Tracker, went to even greater lengths to provide a smoother and more graphic-looking mouse cursor. This was done by constantly re-generating character glyphs in real-time according to the cursor's on-screen position.
BIOS Color Attribute
DecHexBinary Color 0 0 0000 Black 1 1 0001 Blue 2 2 0010 Green 3 3 0011 Cyan 4 4 0100 Red 5 5 0101 Magenta 6 6 0110 Brown 7 7 0111 Light Gray 8 8 1000 Dark Gray 9 9 1001 Light Blue 10 A 1010 Light Green 11 B 1011 Light Cyan 12 C 1100 Light Red 13 D 1101 Light Magenta 14 E 1110 Yellow 15 F 1111 White
A BIOS Color Attribute is an 8 bit value where the low 4 bits represent the character color and the high 4 bits represent the background color. The name comes from the fact that these colors are used in BIOS interrupts, specifically INT 10h, the video interrupt. When writing text to the screen, a BIOS color attribute is used to designate the color to write the text in. For example, to print a white character with a black background, a color attribute of 0Fhex would be used. The high four bits are set to 0000bin, representing the background color, black. The low 4 bits, 1111bin, represent the foreground color, white. The highest bit of the color attribute, which is also the highest bit of the background color can take over two functions. It can either have no influence on the background color making text blink when set, effectively limiting the available background colors to only eight, or if intensive background colors are enabled the full 16 colors become available but blinking is no longer available. This behavior can be changed, i.e., using BIOS interrupt 10hex, function 1003hex. By default, when using the BIOS interrupt, the highest bit controls the brightness of colors, and not blinking, but this behavior may differ in other implementations of BIOS colors . Int 10h/AX=1003 Ralf Brown's Interrupt List, online version This 16 colour palette is often used in console programs (e.g. in Windows) and sometimes for chat in games (e.g. Minecraft).
By default, there are 16 colors for text and only 8 colors for background. There is a way to get all the 16 colors for background, which requires turning off the "blinking attribute".
Access methods
There are generally two ways to access VGA text-mode for an application: through the Video BIOS interface or by directly accessing video RAM and I/O ports. The latter method is considerably faster, and allows quick reading of the text buffer, for which reason it is preferred for advanced TUI programs.
The VGA text buffer is located at physical memory address 0xB8000. Since this address is usually used by 16-bit x86 processes operating in real-mode, it is also the first half of memory segment 0xB800. The text buffer data can be read and written, and bitwise operations can be applied. A part of text buffer memory above the scope of the current mode is accessible, but is not shown.
The same physical addresses are used in protected mode. Applications may either have this part of memory mapped to their address space or access it via the operating system. When an application (on a modern multitasking OS) does not have control over the console, it accesses a part of system RAM instead of the actual text buffer.
For computers in the 1980s, very fast manipulation of the text buffer, with the hardware generating the individual pixels as fast as they could be displayed, was extremely useful for a fast UI. Even on relatively modern hardware, the overhead of text mode emulation via hardware APA (graphics) modes (in which the program generates individual pixels and stores them into the video buffer) may be noticeable.
Modes and timings
Video signal From the monitor's side, there is no difference in input signal in a text mode and an All Points Addressable (APA) mode of the same size. A text mode signal may have the same timings as VESA standard modes. The same registers are used on adapter's side to set up these parameters in a text mode as in APA modes. The text mode output signal is essentially the same as in graphic modes, but its source is a text buffer and character generator, not a framebuffer as in APA.
PC common text modes Depending on the graphics adapter used, a variety of text modes are available on IBM PC compatible computers. They are listed on the table below: