Текстовый режим VGA был представлен в 1987 году компанией IBM как часть стандарта VGA для ее компьютеров IBM PS/2 . [1] Его использование на IBM PC-совместимых компьютерах было широко распространено в 1990-х годах и сохраняется сегодня для некоторых приложений на современных компьютерах. [2] Основными особенностями текстового режима VGA являются цветные (программируемая 16-цветная палитра ) символы и их фон, мигание, различные формы курсора ( прямой/подчеркнутый/скрытый статический/мигающий) [3] и загружаемые шрифты (с различными размерами глифов). [4] Консоль Linux традиционно использует аппаратные текстовые режимы VGA, [5] а консольная среда Win32 имеет возможность переключать экран в текстовый режим для некоторых размеров текстовых окон.
Каждый символ экрана представлен двумя байтами, выровненными как 16-битное слово, доступное ЦП за одну операцию. Нижний (или символьный) байт — это фактическая кодовая точка для текущего набора символов, а верхний (или атрибутный) байт — это битовое поле, используемое для выбора различных видеоатрибутов, таких как цвет, мигание, набор символов и т. д. [6] Эта схема пар байтов входит в число функций, которые VGA унаследовал от EGA , CGA и, в конечном итоге, от MDA .
Цвета назначаются так же, как и в 4-битных индексированных цветных графических режимах (см. Цветовую палитру VGA ).Режимы VGA не нуждаются в атрибутах MDA «реверс» и «яркость», поскольку цвета переднего плана и фона можно задать явно.
Аппаратное обеспечение VGA имеет возможность включать подчеркивание для любого символа, у которого установлен бит атрибута 0. Однако, поскольку это функция, совместимая с MDA, [7] биты атрибутов, не используемые MDA, должны быть установлены в ноль, иначе подчеркивание не будет показано. [6] Это означает, что одновременно с битом 0 (подчеркивание) могут быть установлены только биты 3 (интенсивность) и 7 (мигание). [8] При использовании палитры VGA по умолчанию установка бита 0 для включения подчеркивания также изменит цвет текста на синий. Это означает, что может быть подчеркнут текст только двух цветов (5555FF и 0000AA с палитрой по умолчанию).
Несмотря на все это, подчеркивание обычно не видно в цветных режимах, поскольку расположение подчеркивания по умолчанию соответствует строке сканирования под глифом символа, что делает его невидимым. [6] Если расположение подчеркивания установлено на видимой строке сканирования (как это происходит по умолчанию при переключении в совместимый с MDA монохромный текстовый режим), то подчеркивание будет отображаться.
Экранные шрифты, используемые в EGA и VGA, являются моноширинными растровыми шрифтами, содержащими 256 глифов, и одновременно можно использовать 2 шрифта, что в общей сложности составляет 512 глифов. Все глифы на экране имеют одинаковый размер, но этот размер является переменным. Обычно глифы имеют ширину 8 точек и высоту 8–16 точек, однако высота может быть любым значением вплоть до 32. Каждая строка глифа кодируется 8-битным байтом , со старшими битами слева от глифа и младшими битами справа. Наряду с несколькими аппаратно-зависимыми шрифтами, хранящимися в ПЗУ адаптера , текстовый режим предлагает 8 [6] загружаемых шрифтов. Два активных указателя шрифта (шрифт A и шрифт B) выбирают два из доступных шрифтов, хотя обычно они указывают на один и тот же шрифт. Когда каждый из них указывает на разные шрифты, бит атрибута 3 (см. выше) действует как бит выбора шрифта, а не как бит цвета переднего плана. На реальном оборудовании VGA это переопределяет использование бита для выбора цвета, но на многих клонах и эмуляторах выбор цвета сохраняется — то есть один шрифт отображается с нормальной интенсивностью, а другой — с высокой интенсивностью. Эту разницу (и несовместимость) можно преодолеть, изменив регистры палитры так, чтобы они содержали две копии 8-цветной палитры. Видеокарта с поддержкой VGA должна реализовать символы кодовой страницы 437 в своем Video BIOS . [ требуется цитата ]
Существуют режимы с шириной поля символа 9 точек (например, режим по умолчанию 80×25), однако 9-й столбец используется для интервала между символами, поэтому содержимое не может быть изменено. Он всегда пуст и отображается с текущим цветом фона. [6] Исключением из этого является режим Line Graphics Enable , который приводит к тому, что кодовые точки от 0x C0 до 0xDF включительно [6] имеют 8-й столбец, повторяющийся как 9-й. Эти кодовые точки охватывают те символы рисования поля , которые должны простираться до правой стороны поля глифа. По этой причине следует избегать размещения буквоподобных символов в кодовых точках 0xC0–0xDF. Символы рисования поля от 0xB0 до 0xBF не расширяются, поскольку они не указывают вправо и, следовательно, не требуют расширения.
Форма курсора ограничена прямоугольником полной ширины поля символа и заполнена цветом переднего плана символа в текущем местоположении курсора. Его высота и положение могут быть установлены в любом месте в пределах поля символа;. [9] EGA и многие клоны VGA позволяли использовать курсор с разделенным полем (выглядящий как два прямоугольника, один вверху поля символа и один внизу), устанавливая конец курсора перед началом, однако, если это сделать на оригинальном VGA, курсор полностью скрывается. [9] Стандарт VGA не предоставляет способа изменить частоту мерцания, [9] хотя общие обходные пути включают скрытие курсора и использование обычного символьного глифа для предоставления так называемого программного курсора.
Курсор мыши в TUI (если он реализован) обычно не то же самое, что аппаратный курсор, а представляет собой движущийся прямоугольник с измененным фоном или специальным глифом.
Некоторые текстовые интерфейсы, такие как Impulse Tracker , пошли еще дальше, чтобы обеспечить более плавный и более графически выглядящий курсор мыши. Это было сделано путем постоянной повторной генерации глифов символов в реальном времени в соответствии с положением курсора на экране. [10] [11] [12] [13]
Обычно существует два способа доступа к текстовому режиму VGA для приложения: через интерфейс Video BIOS или путем прямого доступа к видеопамяти [ 4] и портам ввода-вывода. Последний метод значительно быстрее и позволяет быстро считывать текстовый буфер, поэтому он предпочтителен для расширенных программ TUI.
Текстовый буфер VGA расположен по адресу физической памяти 0xB8000. [14] Поскольку этот адрес обычно используется 16-битными процессами x86 , работающими в реальном режиме, он также является первой половиной сегмента памяти 0xB800. Данные текстового буфера могут быть прочитаны и записаны, и могут быть применены побитовые операции . Часть памяти текстового буфера выше области действия текущего режима доступна, но не отображается.
Те же физические адреса используются в защищенном режиме . Приложения могут либо отображать эту часть памяти в свое адресное пространство , либо получать к ней доступ через операционную систему . Когда приложение (в современной многозадачной ОС) не имеет контроля над консолью , оно получает доступ к части системной оперативной памяти вместо фактического текстового буфера.
Для компьютеров 1980-х годов очень быстрая манипуляция текстовым буфером, когда оборудование генерирует отдельные пиксели так быстро, как они могут быть отображены, была чрезвычайно полезна для быстрого пользовательского интерфейса. Даже на относительно современном оборудовании накладные расходы на эмуляцию текстового режима через аппаратные режимы APA (графические) (в которых программа генерирует отдельные пиксели и сохраняет их в видеобуфере) могут быть заметны.
Со стороны монитора нет разницы во входном сигнале в текстовом режиме и режиме All Points Addressable (APA) того же размера. Сигнал текстового режима может иметь те же тайминги , что и стандартные режимы VESA . На стороне адаптера для настройки этих параметров в текстовом режиме используются те же регистры, что и в режимах APA. Выходной сигнал текстового режима по сути такой же, как и в графических режимах, но его источником является текстовый буфер и генератор символов, а не буфер кадра , как в APA.
В зависимости от используемого графического адаптера, на IBM PC-совместимых компьютерах доступны различные текстовые режимы . Они перечислены в таблице ниже:
VGA и совместимые карты поддерживают режимы MDA, CGA и EGA. Все цветные режимы имеют одинаковый дизайн текстовых атрибутов. Режимы MDA имеют некоторые особенности (см. выше) — текст может быть выделен яркими, подчеркнутыми, инверсными и мигающими атрибутами.
Наиболее распространенный текстовый режим, используемый в средах DOS и начальных консолях Windows, — это стандартный 80 столбцов на 25 строк или 80×25 с 16 цветами и большими символами 8×16 пикселей. Карты VGA всегда имеют встроенный шрифт этого размера, тогда как другие размеры могут потребовать загрузки шрифта другого размера. [28] Этот режим был доступен практически на всех IBM и совместимых персональных компьютерах.
Linux kernel 2.6 и более поздние версии предполагают, что режимы от 0000h до 00FFh представляют стандартные режимы, если VGA BIOS поддерживает их, и что режимы от 0100h до 07FFh представляют режимы VESA, если VESA BIOS поддерживает их. Режимы от 0900h до 09FFh являются специальными режимами Video7 (обычно 0940h=80×43, 0941h=132×25, 0942h=132×44, 0943h=80×60, 0944h=100×60, 0945h=132×28 для типичного Video7 BIOS). [29] Linux 2.x позволяет проверять поддерживаемые разрешения видео, передавая аргумент "vga=ask". [30]
Более поздние версии Linux позволяют указывать разрешение с помощью режимов от 1000h до 7FFFh. Код имеет форму "0xHHWW", где HH — это количество строк, а WW — это количество столбцов. Например, 0x1950 соответствует режиму 80×25, 0x2b84 — 132×43 и т. д. [29] (Linux 3.x и более поздние версии позволяют устанавливать разрешение с помощью "video=<conn>:<xres>x<yres>", но только для драйверов видеокадра. [30] [31] )
Существуют еще два текстовых режима VGA, 80×43 и 80×50, но они менее распространены. Windows NT 4.0 отображала свои системные сообщения во время процесса загрузки в текстовом режиме 80×50. [32]
Размеры символов и графические разрешения для расширенных VESA -совместимых текстовых режимов Super VGA зависят от производителя. Некоторые карты, например S3 , поддерживали некоторые очень большие пользовательские текстовые режимы, такие как 132×43 и 132×25. [33] Некоторые графические адаптеры 2000-х годов могли устанавливать текстовый режим произвольного размера (в разумных пределах) вместо выбора его параметров из некоторого списка.
В системах Linux и DOS с так называемыми картами SVGA можно использовать программу SVGATextMode [34] для настройки более привлекательных текстовых режимов, чем стандартные режимы EGA и VGA. Это особенно полезно для больших (≥ 17") мониторов, где разрешение обычного текстового режима VGA 80×25 720×400 пикселей намного ниже, чем у типичного графического режима. SVGATextMode позволяет устанавливать тактовую частоту пикселей и более высокую частоту обновления , больший размер шрифта, размер курсора и т. д., а также позволяет лучше использовать потенциал видеокарты и монитора. В системах, отличных от Windows, использование SVGATextMode (или альтернативных опций, таких как кадровый буфер Linux ) для получения четкого текста имеет решающее значение для ЖК-мониторов с разрешением 1280×1024 (или более высоким), поскольку ни одно из стандартных разрешений текстового режима не соответствует этому размеру матрицы в точности (и возникнут артефакты масштабирования). SVGATextMode также позволяет выполнять тонкую настройку синхронизации видеосигнала.
Несмотря на название этой программы, лишь некоторые из поддерживаемых ею режимов соответствуют стандартам SVGA (т.е. VESA).
Текстовый режим VGA имеет некоторые ограничения, накладываемые оборудованием. Поскольку они слишком ограничительны для современных (после 2000) приложений, аппаратный текстовый режим на совместимых с VGA видеоадаптерах имеет лишь ограниченное применение.
* 8 цветов могут использоваться шрифтом A, а другие 8 цветов — шрифтом B; поэтому, если шрифт A ≠ шрифту B (режим 512 символов), то палитру следует уменьшить вдвое, и текст может эффективно использовать только 8 цветов.
** Обычно, первые 8 цветов одной палитры. Если мигание отключено, то для фона доступны все 16 цветов.
На платформах x86 модуль эмулятора терминала ядра Solaris (tem) использует текстовый режим VGA исключительно для взаимодействия с модулем vgatext. Модуль vgatext использует стандартный для отрасли текстовый режим VGA для взаимодействия с совместимыми с x86 устройствами буфера кадров.
Соответствующий байт в плоскости 1 используется для указания атрибутов символа, возможно, включая цвет, выбор шрифта, мигание, подчеркивание и реверс.
В отличие от оригинальных видеоадаптеров IBM, CGA и MDA, которые хранят битовые карты символов в ПЗУ, где их нельзя изменить, EGA и VGA хранят их в ОЗУ.
Если fbcon отсоединен от уровня консоли, ваш драйвер загрузочной консоли (обычно текстовый режим VGA) возьмет на себя управление.
Трекер работает полностью в текстовом режиме с некоторыми аккуратными переназначениями символов.
...]функции с некоторыми примечаниями:[...] Функции мыши и генерации персонажей в целом. Текстовый режим позволил мне сохранить пользовательский интерфейс быстрым и снизить требования к памяти, но я преодолел разрыв с генерацией персонажей в реальном времени за пределами того, что я видел в других программах.
Джеффри Лим, автор популярной программы Impulse Tracker
Одновременно может отображаться 16 различных цветов. Символы имеют размер 8×16 пикселей, а шрифт состоит из 256 символов. Встроенный шрифт такого размера всегда присутствует на карте VGA.
Очевидным отличием между Windows 2000/XP и Windows NT 4.0 является тот факт, что все системные сообщения, появляющиеся в процессе загрузки Windows NT 4.0, отображаются в текстовом режиме 80×50, тогда как Windows 2000 и Windows XP отображают эти сообщения в режиме VGA.
S3 ViRGE поддерживает расширенные текстовые режимы 132×43 и 132×25 для текстовых приложений. Это также позволяет эмулировать терминалы, требующие 132 столбцов текста.
{{cite web}}
: CS1 maint: numeric names: authors list (link)SVGATextMode использует дополнительные функции карт SVGA для улучшения текстовых режимов Linux. Он позволяет настраивать тактовую частоту пикселей, тайминги H/V, размер шрифта, размер курсора и т. д., а также позволяет использовать весь потенциал видеокарты и монитора в текстовом режиме.