TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Текстовый режим экрана,

структура видеопамяти

Текстовые режимы были первыми, появившимися на экранах компьютеров. В свое время даже существовали мониторы вообще не имевшие возможности отображать графическую информацию (алфавитно-цифровые терминалы). В применении к IBM РС-совместимым компьютерам, о текстовых режимах можно говорить как о наиболее общих для всех моделей. Как следствие изучение их представляет достаточный интерес.

С другой стороны, несмотря на свою простоту, текстовые режимы в IBM PC (под MS-DOS) обладают достаточно широкими возможностями, в частности, являются оконно-ориентированными. В данном контексте изучение и использование таких режимов может быть полезным с методических целей: без особой технической сложности в них реализуются оконные интерфейсы и, как следствие программы, управляемые событиями обретают наглядность.

Наиболее часто используемым режимом является режим 03 и его модификации. Экран в данном режиме разделен на 25 строк и 80 столбцов, что позволяет адресовать 2000 ячеек, называемых знакоместами. На каждом знакоместе может быть отображен один из 256 символов, образы которых содержатся в таблицах знакогенератора. Каждый символ таким образом кодируется одним байтом. Как правило кодирование производится в соответствии с одной из таблиц ASCII. Преобразование однобайтового кода символа в его изображение производится аппаратно.

Коды символов, отображаемых в каждый момент на экране хранятся в видеопамяти. Видеопамять в текстовом режиме с точки зрения программиста представляет собой часть адресного пространства ЦВМ, начинающуюся с адреса B800:000 и кончающуюся B800:7FFF. Так как на описание одного знакоместа требуется 2 байта (код символа и атрибут) существует возможность хранить (и последовательно отображать на экране) до 8 страниц (отдельных изображений).

Как упоминалось выше содержимое каждого знакоместа описывается не только кодом символа, но и атрибутом. Атрибут характеризует цвет, которым отображаются символ и фон за ним. В видеопамяти коды символов располагаются по четным адресам, а атрибуты - по нечетным.

Вывод символа на экран как следствие вышесказанного производится записью пары байт в некоторое место видеопамяти, определяемое активной страницей и положением знакоместа на ней. Делается это либо с помощью прямого обращения либо с использованием функций BIOS или DOS.

Такого рода вывод достаточно утомителен с точки зрения высокоуровневого программирования; вследствие этого, как уже упоминалось в ЯП высокого уровня включают механизмы ввода-выода.

Цвета и окна,

или сделаем программы красивыми

Стандартно Pascal предполагает работу с текстовым экраном с помощью процедур и функций модуля CRT. Однако не запрещается работа с видеопамятью напрямую. Один из вариантов прямых обращений к видеопамяти реализован в модуле Direct_V. Вторым способом является размещение двумерного массива по абсолютному адресу начала видеопамяти. Главным недостатком прямого доступа является отсутствие каких бы то ни было функций работы с окнами, позиционирования курсора и т.п., который приходится реализовывать непосредственно программисту. С другой стороны, программист может реализовать те же функции более эффективно, чем программисты Borland International (в настоящее время - часть Inprise Corporation).

Модуль CRT содержит следующие процедуры и функции для работы с текстовым экраном (более подробную информацию можно получить из справочной системы, int-файла или исходного текста модуля).

procedure AssignCrt(var F: Text); ассоциирует текстовый файл с экраном
procedure TextMode(Mode: Integer); устанавливает текстовый режим с соответствующим номером
procedure Window(X1,Y1,X2,Y2: Byte); организует окно вывода в абсолютных координатах
procedure GotoXY(X,Y: Byte); позиционирует курсор в локальных координатах
function WhereX: Byte; возвращает Х-координату курсора
function WhereY: Byte;  
procedure ClrScr; очищает текущее окно
procedure ClrEol; очищает строку от курсора до границы окна
procedure InsLine; вставляет строку в окно (в позиции курсора)
procedure DelLine; удаляет строку
procedure TextColor(Color: Byte); устанавливает цвет выводимых символов
procedure TextBackground(Color: Byte); то же для фона
procedure LowVideo; уменьшает яркость текущих атрибутов
procedure HighVideo; увеличивает яркость текущих атрибутов
procedure NormVideo; восстанавливает первоначальные атрибуты вывода

Приведенные процедуры и функции позволяют организовывать различные текстовые интерфейсы, в том числе и многооконные. Главным достоинством данного модуля является его полная согласованность с процедурами Write(ln) и Read(ln), что позволяет не заботится о выводе только в пределах окна и подобных им.

 

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz