Fact-checked by Grok 2 weeks ago

VGA text mode

VGA text mode is an alphanumeric display capability of the (VGA), a and graphics standard introduced by in 1987 with the PS/2 line of computers. It enables the rendering of text characters on screen using a grid-based layout, where each character position stores a character code (typically ASCII) and an attribute byte for properties such as foreground and background colors, intensity, underline, and blinking, mapped to a 16-color palette. These modes operate within VGA's 256 KB of video memory, organized in the B8000h segment for the text buffer, with two bytes per character cell, supporting common resolutions of 720x400 pixels for 80x25 text. The primary VGA text modes include 40-column by 25-row and 80-column by 25-row configurations, with vertical resolutions of 200, 350, or 400 scan lines depending on the mode and double-scanning options for compatibility with lower-resolution displays. Mode 3, the standard 80x25 color text mode, uses 4000 bytes per page and supports a 70 Hz refresh rate with 31.5 kHz horizontal scan rate, making it the default for early PC boot screens and console applications. Character rendering draws from ROM-based fonts—such as 8x8, 8x14, or 8x16 pixel matrices—or loadable RAM fonts accommodating up to 512 characters via dual font sets, allowing for international and graphical symbols. Key features include a programmable hardware cursor with adjustable start and end scan lines for shape and position, smooth scrolling via controller registers for vertical and horizontal panning, and split-screen effects using line compare functionality. Color attributes expand 1-bit-per-pixel character bitmaps to 4-bit color planes, supporting modes with gray shades as well as full 16-color text with programmable palettes. An extended 132-column by 25-row mode was later defined for higher-density text, requiring higher clock frequencies and wider horizontal totals, though it remained less common outside specialized applications. VGA text modes were foundational for PC user interfaces, influencing BIOS setups, DOS prompts, and early software until superseded by graphical environments, yet they persist in emulators and legacy systems for their efficiency in text-only output.

Introduction

Definition and features

VGA text mode is a character-based display mode within the Video Graphics Array (VGA) standard, rendering the screen as a grid of fixed-size character cells rather than individual pixels. Each cell consists of a character code paired with an attribute byte, enabling the hardware to generate text output efficiently on CRT displays. This mode supports standard resolutions such as 80 columns by 25 rows, providing a total of 2000 character cells per screen page. Key features include a programmable 16-color palette for foreground and background colors per , drawn from a 256-entry color with 18-bit RGB depth. Blinking text is achieved through a dedicated bit in the attribute byte, which toggles between two color sets at a rate of approximately 1/4 second in standard configurations. Cursor shapes are customizable, ranging from a single underline line to a full block, with up to 32 lines in height and options for replacement or XOR blending. Fonts consist of 256 loadable glyphs, each up to 32 lines high and 9 wide, allowing for selectable character sets stored in video memory. The primary purpose of VGA text mode is to facilitate efficient text-only output for command-line interfaces, bootloaders, and early text user interfaces (TUIs), offering a lightweight alternative to pixel-based graphics modes by leveraging hardware acceleration for character rendering. In operation, the display hardware sequentially scans character codes and attributes to retrieve corresponding glyphs from font storage, combining them with color data to produce the visible output on screen.

Historical context

The (VGA) text mode originated as part of IBM's VGA standard, introduced on April 2, 1987, with the launch of the (PS/2) line of computers, including models 50, 60, and 80. This represented an evolution from earlier IBM display standards, building directly on the (MDA) of 1981, which provided high-resolution monochrome text output; the (CGA) of 1981, introducing color text and basic graphics; and the (EGA) of 1984, which enhanced resolution and color depth. VGA text mode improved upon these by supporting a programmable 16-color palette for characters and backgrounds in a 80x25 or 40x25 grid, while maintaining compatibility with the text-oriented designs of its predecessors. IBM positioned VGA as an to standardize PC , integrating it directly into PS/2 motherboards rather than as a separate card, which facilitated widespread cloning by third-party manufacturers like and S3. This approach made VGA the standard for IBM-compatible PCs, ensuring with MDA, CGA, and EGA text modes through emulated operations, allowing older software to run without modification. The standard's openness contrasted with IBM's prior proprietary efforts, enabling rapid industry adoption and solidifying VGA's role in the evolving PC ecosystem. VGA text mode dominated the era throughout the late and , serving as the primary display mechanism for operating system boot screens, text-based applications, and early games on PCs, due to its efficiency and hardware integration. Its influence extended through the (VESA) extensions in the , which built upon VGA to support higher resolutions and modes while preserving core text functionality for compatibility. Key milestones include the 1987 PS/2 release, which shipped over 1 million units in its first year and popularized VGA; the 1989 VESA standard for programming; and 1994's VESA 2.0, adding advanced features like linear access. VGA text mode's legacy persists into the 2020s in embedded systems, such as FPGA implementations for text displays, and in emulators like , where it enables retro software execution on modern architectures including and .

Data Arrangement

Text buffer organization

In VGA text mode, the text is located at physical 0xB8000 within the VGA's 64 KB video , corresponding to B800h in addressing. For emulation, the resides at 0xB0000 instead. This 32 KB region supports the display of alphanumeric characters and their attributes, with the active text occupying a portion based on the selected . The buffer's structure consists of sequential 16-bit words, where each character cell requires 2 bytes: the first byte stores the ASCII code point (ranging from 0 to 255), and the second byte holds the attribute information. In the standard 80×25 text mode, this arrangement yields 2000 character cells, consuming 4000 bytes total (80 columns × 25 rows × 2 bytes per cell). The data is laid out row-by-row, starting from the top-left corner of the screen; for example, the first row occupies bytes 0–159, the second row bytes 160–319, and so on, enabling straightforward linear access to screen positions. Although VGA video RAM is organized into four bit planes for graphics modes (with planes 0 and 1 typically used for pixel data), text modes employ a unified access model through the attribute controller, where character codes are derived from plane 0 and attributes from plane 1, while plane 2 supports font data storage separately from the text itself. This plane-based organization ensures efficient rendering without multi-plane interleaving in the buffer memory. Scrolling in the text buffer is primarily handled by hardware through the Controller (CRTC) registers, such as the Start Address High (index 0Ch) and Low (index 0Dh) registers, which adjust the display start address to shift the visible portion of the buffer. The register (index 13h) further defines the line width in doublewords, facilitating vertical scrolling. For multi-page displays or software-driven paging, the buffer contents can be manipulated by copying blocks of memory to wrap around or clear sections, though hardware synchronization with vertical retrace (via Input 1) prevents visual artifacts during such operations.

Character attributes

In VGA text mode, each character cell in the video memory buffer is associated with an 8-bit attribute byte that determines its visual properties, including colors and special effects. The structure of this byte is as follows: bits 0–3 encode the foreground color as an index from 0 to 15, selecting the color for the character's glyph; bits 4–6 encode the background color as an index from 0 to 7, filling the remainder of the cell; and bit 7 serves as the blink flag (set to 1 to enable for that character) or, when global blinking is disabled, as a background intensity bit to extend the background palette to indices 8–15. This bit-level encoding allows per-character customization without altering the underlying character code. The color system relies on a 16-entry palette, where each corresponds to a specific color defined by 6-bit RGB values (18-bit total ), though these values are programmable via the (DAC) registers for custom hues. Indices 0–7 represent standard low-intensity colors, while 8–15 denote their high-intensity counterparts, providing visual emphasis through brightness rather than a separate attribute bit. The standard default palette, as defined in VGA hardware, maps as shown in the table below:
IndexColorRGB (approximate)
0Black000000
1Blue0000AA
200AA00
300AAAA
4AA0000
5AA00AA
6AA5500
7Light GrayAAAAAA
8Dark Gray555555
95555FF
10Light Green55FF55
11Light Cyan55FFFF
12Light RedFF5555
13Light MagentaFF55FF
14YellowFFFF55
15Bright WhiteFFFFFF
This palette ensures compatibility with earlier standards like EGA while allowing hardware-level remapping for applications requiring non-standard colors. Special effects are limited but effective for basic text enhancement. The blink effect, controlled by bit 7 of the attribute byte, causes the character to alternate visibility at a rate derived from the vertical refresh (typically every 1/32nd of a frame when enabled globally via the Attribute Controller's Mode Control Register at index 10h, bit 3). When blinking is active, the hardware remaps the foreground color to match the background during "off" phases, creating a flashing appearance; disabling the global blink repurposes bit 7 for background intensity, allowing brighter backgrounds without flashing. Foreground intensity is achieved by selecting palette indices 8–15, which inherently brighten the color without additional bits. Underline effects are not native to the attribute byte but can be simulated through palette manipulation (e.g., rendering a low scanline in the background color) or attribute adjustments combined with character codes like the underscore. Bold and italic styles lack native hardware support in the attribute system, requiring software emulation via double-striking or font variants. During rendering, the VGA hardware fetches the attribute byte alongside the code from the text buffer during scanout. The Attribute Controller combines the attribute with the bitmap (retrieved from character generator or ) to generate data: for each bit in the 8x16 (or similar) pattern, a set bit draws the foreground color, while an unset bit fills with the background color, covering the full (typically 9x16 pixels including spacing). Blink and intensity modifications are applied in by the controller, ensuring efficient hardware-accelerated without CPU intervention for effects. This process integrates seamlessly with the video timing, producing stable text output on monitors.

Fonts and glyphs

In VGA text mode, fonts consist of 256 s corresponding to code points 0 through 255, stored as fixed-width in the video adapter's 8 KB alphanumeric generator or loaded into an 8 KB buffer for customization. Each is an 8-pixel-wide , with height varying by mode up to 32 pixels, represented as one byte per row where bits encode foreground pixels (1) against background (0); for instance, an 8x16 requires 16 bytes, yielding 4 KB total for all 256 s in that size. Fonts are loaded via BIOS interrupt 10h with AH=11h and subfunctions specified in AL, such as AL=00h to load user-defined bitmaps from memory pointed to by ES:BP (with CX indicating character count and DX the starting code), or AL=01h/04h to transfer predefined 8x14 or 8x16 ROM fonts into RAM. Direct hardware access allows writing to the font RAM at physical address 0xA0000 (video memory map 2), enabling runtime modifications without BIOS. Supported bitmap sizes include 8x8, 8x14, and 8x16 pixels, selected based on the active display mode. During rendering, the VGA sequencer and character generator hardware process each text buffer cell by indexing the glyph in or using the 8-bit character code from the buffer. The retrieved bitmap rows are then rasterized scanline-by-scanline, modulated by the cell's attribute byte to apply foreground/background from the 16-color palette, producing the final or character image on screen. For international support, code page selection loads alternate glyph sets into the font RAM via extended BIOS calls (e.g., INT 10h AH=11h with user data), enabling diverse scripts like Latin, Cyrillic, or Greek. VGA hardware supports up to 512 total characters across two character maps (fonts A and B). These can be selected for code ranges 0-127 and 128-255 via the Attribute Controller's Character Map Select register (index 03h). Alternatively, when the CRT Mode Control register (index 17h, bit 0) is set, bit 3 of the attribute byte is redefined from foreground intensity to toggle between the two full 256-glyph sets dynamically per character, though this sacrifices intensity selection.

Cursor implementation

In VGA text mode, the cursor is a hardware overlay that indicates the current input position within the text buffer, appearing as a visible marker on the display. It supports two primary types: a full block cursor that spans the entire height of a character cell, or an underline cursor limited to a single scanline, typically at the bottom. The cursor's shape and visibility are programmable through the Controller (CRTC) registers, allowing dynamic adjustment without altering the underlying text buffer. The cursor shape is controlled by CRTC registers 0x0A (Cursor Start) and 0x0B (Cursor End), which define the range of scanlines within a character cell where the cursor appears. Register 0x0A specifies the starting scanline (bits 0-4, range 0-31) and includes a disable bit (bit 5 set to 1 to turn off the cursor), while register 0x0B sets the ending scanline (bits 0-4, range 0-31) and provides skew control for horizontal alignment (bits 5-6, 0-3 character clock delays). For an 8x16 pixel font (16 scanlines per character), a block cursor covers all lines by setting start to 0 and end to 15, whereas an underline cursor uses start=14 and end=15 to highlight only the bottom line. If the start value exceeds the end value, the cursor is hidden, providing a method to suppress visibility without changing its position. The cursor position is tracked as a 16-bit address corresponding to a location in the text buffer, calculated as (row × columns + column) shifted left by 1 to account for the two-byte character-attribute pair per cell. This address is loaded into CRTC registers 0x0E (high byte) and 0x0F (low byte), representing the byte offset from the display memory start address (typically B8000h in VGA). Updates to these registers directly reposition the cursor on the screen, with the hardware automatically handling the overlay on the character at that location. Moving the cursor off-screen (e.g., beyond the visible buffer) also hides it. The cursor blinks under control at a rate of 1/32 of the vertical field rate, resulting in approximately 1.875 cycles per second at a standard 60 Hz refresh (50% on/off ). This blinking is enabled via the Attribute Controller's Mode Control register (index 0x10, bit 3) and operates independently of text attribute blinking, though both can be disabled or reconfigured in extended modes. The fixed rate ensures consistent behavior across compatible without software intervention for timing.

Access Methods

BIOS interface

The interface for VGA text mode is provided through Interrupt 10h (INT 10h), a standard entry point for video services in PC-compatible systems, allowing software to interact with the display without direct manipulation. This interrupt handler, part of the system ROM, supports a range of subfunctions specified in the AH register, enabling operations such as cursor control, text scrolling, character I/O, mode selection, and font management specifically tailored for text modes like the 80x25 color text mode (mode 03h). These services ensure portability across compatible by abstracting low-level details, though they incur overhead due to the interrupt mechanism and execution. Key subfunctions for text mode operations include cursor positioning and querying. For instance, AH=02h sets the cursor position by specifying the page in BH (typically 0 for single-page modes), row in DH (0-24 for 25 rows), and column in DL (0-79 for 80 columns), updating the cursor registers without altering the text buffer contents. Complementarily, AH=03h retrieves the current cursor position and shape, returning the row and column in DH/DL, page in BH, and cursor scanline bounds in CH/CL (start and end lines, e.g., 0x00 to 0x0F for a full block cursor). Scrolling functions AH=06h (up) and AH=07h (down) adjust the text window defined by upper-left (CH/CL) and lower-right (DH/DL) coordinates, with AL indicating lines to scroll (or 0 to clear with attribute in BH); these operations shift buffer contents and fill cleared areas with the specified attribute for visual consistency. Reading and writing characters with attributes are handled by AH=08h, which returns the character in AL and attribute in AH at the cursor position on the given page (BH), and AH=09h, which writes CX instances of character AL with attribute BL to the current position on page BH, advancing the cursor accordingly. For simple output, AH=0Eh performs teletype-style writing of character AL to the active page (BH), with color in BL for color modes, automatically handling control codes like carriage return, line feed, backspace, and bell for console emulation. Video mode setting is achieved via AH=00h, where AL specifies the mode value—such as 03h for 80x25 color text with a 16-color palette and character attributes—to initialize the display, clear the screen, and configure hardware registers for text rendering. Font loading, essential for customizing glyphs in text modes, uses AH=11h with subfunctions in AL to load character definitions into video memory: AL=00h or 10h for user-defined 8-scanline fonts (block 0), AL=11h for 14-scanline monochrome ROM fonts (block 1), AL=12h for 8-scanline double-dot ROM fonts (block 0 alternate), and AL=14h for 16-scanline ROM sets (block 2), with ES:BP pointing to font data, CX as bytes per character, and BH/DX for block and offset selection; these support up to 32 scanlines in extended configurations by loading into one of eight font blocks selectable via sequencer registers. While convenient for compatibility, the BIOS interface is slower than direct memory or port access due to interrupt overhead and BIOS code execution, limiting its use in performance-critical applications like games or real-time displays. In modern systems, services are often emulated by firmware's Compatibility Support Module () to maintain with legacy software, though native graphics protocols have largely supplanted it.

Direct hardware access

Direct hardware access to VGA text mode involves interacting with the video hardware through I/O ports and direct memory writes, bypassing higher-level interfaces for greater control and performance. This method targets the VGA's controllers, such as the Cathode Ray Tube Controller (CRTC) and Sequencer, using index/data register pairs to configure display parameters and manipulate the text buffer. VGA hardware communicates via dedicated I/O port ranges: 0x3B0–0x3BF for adapters and 0x3C0–0x3DF for color systems. Key controllers include the CRTC, accessed through s 0x3D4 () and 0x3D5 () on color systems, which handles cursor positioning and screen timing; the Sequencer, using 0x3C4 () and 0x3C5 (), which manages organization; and the Attribute Controller at 0x3C0 for color and attribute settings. To read or write a , software first outputs the to the , then the to the ; for example, enabling odd/even interleaving for requires setting Sequencer 0x04 to 0x03. Palette adjustments, useful for custom text colors, occur via s 0x3C8 () and 0x3C9 () for red, green, and blue components. The text buffer resides in video RAM at physical address 0xB8000 for color modes (or 0xB0000 for monochrome), organized as 80x25 character cells where each cell spans two bytes: the first for the ASCII character code and the second for attributes like foreground/background color and blinking. Direct writes, or "pokes," to this memory update the display immediately; a simple loop in assembly might iterate over the buffer, writing character-attribute pairs (e.g., 0x0720 for a space with white-on-black attributes) to render text output. For cursor control, the CRTC registers at indices 0x0E (high byte) and 0x0F (low byte) store the cursor's memory address: output the index to 0x3D4, followed by the high byte to 0x3D5, then repeat for the low byte. This approach excels in performance-critical applications, such as real-time text user interfaces (TUIs), by avoiding overhead and enabling rapid updates without context switches. In multitasking operating systems, access requires locking mechanisms to prevent concurrent conflicts, often implemented via operations or semaphores.

Display Modes

Standard VGA modes

The standard VGA text modes, as defined in the IBM Video Graphics Array (VGA) specification, consist of four primary alphanumeric display configurations accessible via BIOS interrupt 10h with AH=00h and AL set to the desired mode number. These modes provide backward compatibility with earlier adapters like the Color Graphics Adapter (CGA) and Enhanced Graphics Adapter (EGA), supporting text-based output in either color or monochrome formats. They operate using a character-based display with 25 rows and either 40 or 80 columns, utilizing fonts of 8×8, 8×14, or 9×16 pixels to achieve effective pixel resolutions such as 320×200, 640×200, 720×400, or variants like 360×400 in double-scanned configurations.
BIOS ModeColumns × RowsTypeBase MemoryTypical Pixel Resolution (with 9×16 font)
00h40 × 25Color (16 colors)B8000h360 × 400
01h40 × 25B0000h360 × 400
02h80 × 25Color (16 colors)B8000h720 × 400
03h80 × 25Color (16 colors)B8000h720 × 400
Mode 00h and 02h emulate CGA-compatible low-resolution color text, while 01h provides monochrome output akin to the Monochrome Display Adapter (MDA), and 03h offers high-resolution color text, differing from CGA's monochrome mode 3 by supporting 16 colors. The 40-column variants (00h and 01h) ensure compatibility with legacy software expecting narrower displays, whereas the 80-column modes (02h and 03h) became the de facto standard for text interfaces due to their higher information density. Activation of these modes can occur through the BIOS interface by invoking INT 10h with AH=00h and AL specifying the mode (e.g., AL=03h for 80×25 color), which initializes the necessary hardware registers including the CRT Controller (CRTC) and sequencer. For direct hardware access, programmers configure the CRTC registers (indexed via port 3B4h/3D4h) and sequencer (port 3C2h), such as setting the horizontal total in CRTC register 00h to define the character width per scanline (e.g., values around 95–99 decimal for 80 columns in 9-dot mode). Monochrome modes map to video memory at segment B0000h, while color modes use B8000h, each allocating 32KB for the text buffer in standard configurations. These modes support up to eight selectable ROM fonts, with the active font size influencing the vertical resolution through adjustments in CRTC register 09h and the vertical total.

Timing and video signal

The timing parameters of VGA text mode are defined by the Cathode Ray Tube Controller (CRTC) registers and the selected pixel clock, generating the horizontal and vertical synchronization signals necessary for display. In the standard 80×25 text mode, the pixel clock operates at 28.322 MHz, producing a horizontal frequency of approximately 31.5 kHz and a vertical refresh rate of 70 Hz. These values ensure compatibility with VGA monitors, where the visible display area consists of 720 horizontal pixels (80 characters × 9 pixels per character, including inter-character spacing) and 400 vertical scanlines (25 characters × 16 scanlines per character). Horizontal timing encompasses 900 total pixels per line, with 720 pixels dedicated to the visible character area and 180 pixels for blanking intervals. The sync pulse spans 108 pixels, preceded by a front porch of 18 pixels and followed by a back porch of 54 pixels during the horizontal blanking period. These parameters are configured through CRTC registers 0x00 to 0x05, typically set to values such as 0x63 (horizontal total of 100 character clocks), 0x4F (display end at 80 characters), 0x57 (blanking start at 88 characters), 0x03 bits adjusted for blanking end, 0x5F (retrace start at 96 character clocks), and 0x03 bits for retrace end, where each character clock corresponds to 9 pixel clocks in 9-dot mode enabled by the sequencer. The horizontal frequency is calculated as the pixel clock divided by the total pixels per line: f_h = \frac{28.322 \times 10^6}{900} \approx 31.5 kHz. Vertical timing includes 449 total scanlines per frame, comprising 400 visible scanlines and 49 for blanking. The vertical sync pulse lasts 2 scanlines, with a front porch of 10 scanlines and a back porch of 37 scanlines. These are programmed via CRTC registers 0x06 to 0x11, with representative values including 0xC0 (vertical total low byte, high bits in 0x07 for 449 total), 0x07 overflow bits set accordingly, 0x9C (retrace start at 412 adjusted), and 0x02 for retrace end (2 lines wide), alongside 0x12 for display end at 400 and 0x15/0x16 for blanking start/end. The vertical refresh rate derives from the horizontal frequency divided by total scanlines: f_v = \frac{31.5 \times 10^3}{449} \approx 70 Hz. The video signal outputs consist of analog RGB components at 0.7 V peak-to-peak levels, driven by the , with separate horizontal and vertical sync signals at levels (0–5 V). The character clock is derived by dividing the pixel clock by 9 in , yielding approximately 3.14 MHz to scan out each 9-pixel-wide character cell. Composite sync is not natively generated; instead, HSync and VSync are provided on dedicated pins of the 15-pin D-sub connector for monitor synchronization.

Extended text modes

Extended text modes in VGA represent enhancements developed after the original VGA specification, primarily through standards like the (VBE) and manufacturer-specific extensions for (SVGA) hardware. These modes increase the number of visible text characters by adjusting character cell sizes, scan lines, and horizontal resolutions while maintaining compatibility with the VGA text buffer format. VBE 1.2 and later versions standardized several high-resolution text modes to support applications requiring more on-screen information, such as spreadsheets and text editors in environments. VESA standards from version 1.2 onward define extended text s with up to 132 columns and 60 rows, accessible via specific numbers in the 0x100 to 0x11F range. For instance, 0x109h enables 132x25 text, 0x10Ah provides 132x43, 0x10Bh offers 132x50, and 0x10Ch supports 132x60, all using 8-pixel-wide characters and adjustable heights for denser displays. These s leverage either linear frame buffer access (if supported, indicated by bit 14 in the mode attributes) for direct memory mapping or banked access through CPU-addressable windows for older hardware constraints. VBE 2.0 further refined this by deprecating fixed numbers in favor of dynamic querying but retained support for these resolutions via the ModeInfoBlock structure returned by function 01h. SVGATextMode, an extension popularized through utilities like those integrated with UniVBE for SVGA cards from manufacturers such as Tseng Labs, allows reprogramming of the CRTC (Cathode Ray Tube Controller) to achieve non-standard text resolutions without full VBE compliance. This enables modes like 80x43, 80x50, and 132x25 by increasing scan lines (e.g., from 400 to 480 or 900) and adjusting horizontal timings, often using 8x8 or 8x9 character fonts for finer granularity. Such extensions were particularly useful on early SVGA chipsets like the Tseng ET4000, providing higher line counts for console applications while preserving the 16-color attribute system inherent to VGA text rendering. Implementation of these modes typically requires the VESA BIOS Extension via interrupt 10h with AX=4F02h to set the desired mode number, followed by optional font loading (e.g., via INT 10h AH=11h) to scale glyphs for higher densities, such as 8x8 pixels per character in 43- or 50-line modes. Despite the increased resolution, compatibility with the VGA's 16-color limit persists, as attributes remain encoded in a single byte per character (4 bits foreground, 4 bits background), restricting palettes to the default EGA/VGA set unless hardware supports expanded DAC (Digital-to-Analog Converter) remapping. These modes often demand careful synchronization with monitor timings to avoid artifacts, and software must query mode attributes via VBE function 01h to confirm support. Representative examples include the 100x37 text mode on Cirrus Logic chips like the CL-GD542X, which operates at 800x600 with 16 or 256 colors and refresh rates up to 72 Hz, using modes such as 58h, 6Ah, or 5Ch. This was commonly utilized in extenders for protected-mode applications and early Windows environments to display more content in productivity software like or , enhancing usability without switching to modes.

Limitations and Legacy

Technical restrictions

VGA text mode is constrained by a fixed 16-color palette for both foreground and background, with each color defined by 6 bits per RGB component in the DAC, limiting visual expressiveness and precluding support for alpha blending, gradients, or higher color depths. These colors are selected via 4-bit indices in the attribute byte, allowing only 16 simultaneous choices without palette reprogramming. The character set is restricted to a maximum of 512 glyphs, comprising two 256-glyph banks loaded into the character generator RAM, with selection toggled by bit 3 of the foreground intensity in the attribute byte; the base 256 glyphs typically follow , which extends ASCII but provides no native support, confining output to various legacy code pages, primarily supporting Latin-based scripts such as and its regional variants. The standard display resolution is 80 columns by 25 rows of , corresponding to a 720×400 pixel scanout (9 pixels wide by 16 pixels high per ), with no or variable aspect ratios due to the fixed monospace design and timing. is limited to basic scanout from the video , without dedicated for text rendering, , or attribute updates beyond simple attribute controller operations. Video RAM totals 256 KB across four 64 KB planes, but CPU access in graphics modes is restricted to a 64 KB window at A0000h–AFFFFh, shared between text and graphics modes and often requiring ; the text is at B8000h. The blinking attribute operates globally rather than per character: when enabled in the , it affects all characters with bit 7 set in their attribute byte at a fixed rate of the vertical sync divided by 32, with no granular control over timing or selection.

Modern relevance

Despite the dominance of graphical user interfaces, VGA text mode retains niche relevance in legacy support within contemporary operating systems and bootloaders as of 2025. In distributions, the frame console (fbcon) provides for VGA text modes through device drivers that access video memory for character-based output during early boot phases or in minimal console environments. Similarly, the Windows command-line tools, including CMD and , rely on the Win32 console to render text in a manner compatible with VGA text characteristics, ensuring for legacy applications. Bootloaders like support VGA text modes in both and environments; for instance, GRUB's vga_text output option and efitextmode command enable 80x25 text rendering on EFI platforms to display boot menus and error messages. Emulation plays a key role in preserving VGA text mode for development and retro computing. Virtual machines such as and include VGA hardware simulation, allowing developers to test operating systems by writing directly to emulated video at segment 0xB8000 for text display, which is essential for without physical hardware. In hardware recreation projects, field-programmable gate arrays (FPGAs) are employed to implement VGA text mode generators, enabling retro-style displays on modern boards for educational and hobbyist purposes, such as simulating 1980s-era PC consoles. Transitions to modern alternatives have diminished direct reliance on VGA text mode, with the UEFI Graphics Output Protocol (GOP) serving as its primary successor by providing access for rendered text in graphical boot environments, supporting higher resolutions and eliminating the need for legacy text hardware. (TUI) libraries like abstract console operations across platforms, including those mimicking VGA text attributes, to create portable applications without tying to specific video modes. In recent applications, VGA text mode appears in embedded systems via adapters on devices like the for simple output in bare-metal projects, and among hobbyist operating system developers who favor it for its straightforward implementation in early kernel stages. No significant extensions to VGA text mode have emerged in the 2020s, with its endurance confined to compatibility layers in emulators and boot firmware.

References

  1. [1]
    What is VGA? Understanding Video Graphics Array Technology - HP
    Aug 28, 2024 · First introduced by IBM in 1987, VGA quickly became the default graphics standard for PCs and laid the foundation for modern computer displays.
  2. [2]
    [PDF] Video Subsystem
    Apr 9, 1992 · Set VGA mode 3 using INT 10h AX=0003h. The 132-column text mode is a variation of the VGA text mode. The following table gives the ...
  3. [3]
  4. [4]
    [PDF] Technical Reference Manual - Bitsavers.org
    Jun 30, 1988 · The V7 VGA provides loadable character set capability in text mode. ... features, since the V7VGA runs standard VGA software just as an IBM VGA ...
  5. [5]
    Famous Graphics Chips: IBM's VGA - IEEE Computer Society
    Mar 12, 2019 · While the VGA was an incremental improvement over its predecessor EGA (1984) and remained backward compatible with the EGA as well as the ...
  6. [6]
    1987 | Timeline of Computer History
    Many credit the PS/2 for making the 3.5-inch floppy disk drive and video graphics array (VGA) standard for IBM computers. The system was IBM's response to ...Missing: persistence | Show results with:persistence
  7. [7]
    Graphics Cards - DOS Days
    Though Super VGA cards appeared in the same year as VGA (1987), it wasn't until 1989 that the VESA standard for programming Super VGA modes was fully defined ...
  8. [8]
  9. [9]
    [PDF] EGA-VGA A Programmer's Reference Guide 2nd Edition ... - vtda.org
    Assembler version 4.0. Compatibility modes will refer exclusively to graphics modes, since all text modes are compatible between adapters. The EGA and VGA ...
  10. [10]
    Appendix A VGA Programming Model - O3ONE
    VGA provides alphanumeric modes for text processing and graphics modes for graphics processing. ... Set the extended memory bit in the Memory Mode register (0x04) ...
  11. [11]
    VGA ROM Fonts - Alexandru Groza
    VGA ROM fonts cannot be replaced that easily. However, there is a quick method that allows you to upload a custom font into the VGA RAM.
  12. [12]
    [PDF] DOS INTERRUPTS - IC-Unicamp
    INT 10 - AH = 11h VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA) ......................................................19. INT 10 - AH = 11h ...
  13. [13]
    VGA Fonts - OSDev Wiki
    It's quite simple, 0 encodes background, 1 encodes foreground color. VGA fonts are always 8 bits wide so that each byte contains exactly one row.
  14. [14]
    ibm-vga.txt
    VGA provides alphanumeric modes for text processing and graphics modes for graphics processing. The following table describes the alphanumeric (A/N) and all ...Missing: technical | Show results with:technical
  15. [15]
    VGA/SVGA Video Programming--Manipulating the Text-mode Cursor
    On the VGA, the text-mode cursor consists of a line or block of lines that extend horizontally across the entire scan line of a character cell.
  16. [16]
    [PDF] in IBM's PS/2 and PC BIOS Interface Technical Reference
    Software interrupts INT 10H through INT 1AH each access different. BIOS routines. ... The following is a summary of the video functions of INT 10H: (AH) = OOH ...
  17. [17]
    BIOS - OSDev Wiki
    To an extent, the BIOS functions are organized by interrupt number: INT 0x10 = video display functions (including VESA/VBE); INT 0x13 = mass storage (disk ...
  18. [18]
    [PDF] efi-bios-10-4-users-guide.pdf - Intel
    the VBIOS calls the System BIOS Intel® 5F interrupt functions. This setting consists of six numbers, where each number is associated with one of the System ...
  19. [19]
    VGA Video Modes - Ardent Tool of Capitalism
    Oct 6, 2025 · The VGA is the video sub-system built into IBM's PS/2 Models 50, 60, and 80. It is also widely available as an adapter for the IBM PC XT and AT.
  20. [20]
    VGA/SVGA Video Programming--CRT Controller Registers
    This field controls the appearance of the text-mode cursor by specifying the scan line location within a character cell at which the cursor should begin, with ...
  21. [21]
    Graphics 2: VGA and SuperVGA
    The VGA hardware interface is very complex, consisting of five controllers and over a hundred hardware registers accessible from the Port I/O address space. A ...
  22. [22]
    [PDF] VGA BIOS OEM Reference Guide - VersaLogic
    Jul 2, 1999 · This is a VGA BIOS OEM Reference Guide, Revision 1.0, dated July 1999, providing general information for the customer.
  23. [23]
    VGA timing information - ePanorama.net
    Nov 19, 1997 · VGA timing information. This documents tries to collect together ... 900 VGA 720x350 70Hz 28.322 3.81 108 51 726 15 900 VGA 800x600 56Hz ...
  24. [24]
    VGA Hardware - OSDev Wiki
    By default, the VGA operates in read mode 0 and write mode 0 in such a fashion that all written data goes straight to memory, and read data from each plane is ...
  25. [25]
    VESA Super VGA Standard - QZx
    The primary topics of this specification are definitions of extended VGA video modes and the functions necessary for application software to understand the ...Missing: PDF | Show results with:PDF
  26. [26]
    [PDF] VESA BIOS Extension (VBE) Core Functions Standard Version 2.0
    Standard VGA mode numbers are 7 bits wide and presently range from 00h to 13h. OEMs have defined extended display modes in the range 14h to 7Fh. Values from 80h ...
  27. [27]
    SVGATextMode Issue 21 - Linux Documentation Project
    With my generic S3 Virge card, these modes are offered: 80x25; 80x50; 80x43; 80x28; 80x30; 80x34; 80x60; 132x25; 132x43. It's nice to have a choice of video ...Introduction · How It Works · Configuration And UseMissing: UniVBE extension Tseng Labs
  28. [28]
    [PDF] True Color VGA ':amily - CL·GD542X
    Jan 2, 1994 · Cirrus Logic, Inc., believes the information contained in this document is accurate and re- liable. However, it is subject to change without ...Missing: extenders | Show results with:extenders
  29. [29]
    VGA/SVGA Video Programming--VGA Text Mode Operation
    This section is intended to document the VGA's operation when it is in the text modes, including attributes and fonts.
  30. [30]
    How can MS-DOS and other text mode programs display double ...
    Sep 20, 2013 · As default text mode can only display 256 characters, but the first 128 is used for ASCII, so usable ones are limited to the high 128 code points.Missing: adoption | Show results with:adoption
  31. [31]
    VGA Text Mode | Writing an OS in Rust
    Feb 26, 2018 · In this post, we learned about the structure of the VGA text buffer and how it can be written through the memory mapping at address 0xb8000 . We ...Missing: B8000 | Show results with:B8000
  32. [32]
    How do 80x25 characters (each with dimension 9x16 pixels) fit on a ...
    Jan 25, 2023 · In video mode 3, there are 80x25 characters and each character uses 9x16 pixels. But 9x80 = 720 and 16x25 = 400. So 80x25 characters would need 720x400 ...<|control11|><|separator|>
  33. [33]
    Why VGA framebuffer was limited to 64kB window?
    Jun 4, 2019 · The VGA board can be configured for a 128k framebuffer at A0000h, but both 64k segments will access the 64k addresses of video RAM identically.
  34. [34]
    [PDF] AD8264 | Quad, 235 MHz, DC-Coupled VGA and Differential Output ...
    Combined with a multioutput, digital-to-analog converter (DAC), each section ... Power Consumption. Quiescent Current. VS = ± 2.5 V. 65. 79. 88. mA. VS = ± 2.5 V ...Missing: heat | Show results with:heat
  35. [35]
    The Frame Buffer Device — The Linux Kernel documentation
    ### Summary of VGA Text Mode Support in Linux fbcon or vgacon
  36. [36]
  37. [37]
    System Emulation — QEMU documentation
    - **Content Summary**: The provided excerpt from https://www.qemu.org/docs/master/system/index.html introduces the system emulation section of the QEMU manual. It serves as an overall guide for users employing QEMU for full system emulation, distinct from user-mode emulation. It mentions support for hypervisors like KVM, Xen, and Hypervisor.Framework but does not provide specific details on VGA emulation or text modes for OS development.
  38. [38]
    Chapter 3. Configuring Virtual Machines
    ### Summary: VirtualBox VGA Console Simulation for Text Modes
  39. [39]
    Specifications | Unified Extensible Firmware Interface Forum
    ### Summary of UEFI GOP as Replacement for VGA Text Modes
  40. [40]
    Raspberry Pi computer hardware - Raspberry Pi Documentation
    The official documentation for Raspberry Pi computers and microcontrollers.Raspberry Pi 4 Case Fan · Processors · PoE HAT