Сайт Льва Волкова
  
· В Моухейв Каунти в Аризоне вора, попавшегося на краже мыла, предписывается мыть этим мылом до тех пор, пока оно не кончится.
 
      На главную  
 Личное
  Статьи
  Задачи 
 Ссылки
 АТ-531
www.levvol.ru    
 
Модуль CRT

Модуль CRT включает средства для управления видеопамятью, а также средства для работы со звуком, клавиатурой, таймером.

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

Пожалуй, единственным и наиболее важным отличием телевизора и монитора является то обстоятельство, что программист может управлять светимостью экрана монитора в любой его точке, т.е. до отдельного пикселя. Такая возможность достигается ценой усложнения электронных компонентов монитора по сравнению с бытовым телевизором. Если предположить, что на экране одновременно демонстрируется 400 строк по 700 пикселей в каждой строке (это параметры бытового телевизора), то для управления экраном понадобится выдавать 25 раз в секунду по 700х400=280000 команд на установку той или иной яркости и цвета каждого пикселя. Иными словами, процессор должен обладать производительностью 700х400Х25=1120000 команд в секунду. В этом случае большая часть мощности процессора будет затрачена на регенерацию изображения на экране монитора.

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

В Turbo Pascal используются два вида информации, появляющейся на экране монитора - графическая и текстовая. Графическая информация - это чертежи, графики, рисунки и т.п. Текстовая - различные символы. Это различие установилось в связи с возможностями компьютеров (сравнительно невысокими) во времена разработки языка Тurbo Pascal.

Каждый символ представляет один из 256 заранее обусловленных знаков. Для размещения символа на экране используется квадратная матрица 8х8=64 пикселей, которая называется знакоместом. Первые 8 строк развертки образуют 80 знакомест первой тескстовой строки, вторые 8 строк образуют 80 знакомест второй строки и т.д. Всего на экране 640х200 пиксел может быть 200/8=25 текстовых строк. При этом для хранения информации о символе видеопамяти не надо использовать матрицу 8х8 разрядов, т.е. 8 байт, достаточно указать лишь номер данного символа из возможных 256, а для этого можно обойтись 1 байтом. Используя этот байт как ключ, электронные схемы развертки отыщут в постоянной памяти (ПЗУ-ROM) одну из 256 матриц 8х* разрядов и, согласуясь с ней, вычертят на экране нужный символ. На самом деле в видеопамяти приходится хранить не один, а два байта о каждом знакоместе - второй байт используется для хранения информации о цвете символа и фона, яркости символа и о мерцании.

Наиболее важные комоненты видеодисплея - контроллер (схема управления) монитором, программируемые порты ввода-вывода, матричный ПЗУ-ROM-генератор символов и буфурная видеопамять - традиционно называются видеоадаптером. Размеры экрана в текстовом режиме Turbo Pascal могут быть по горизонтали 80 или 40 позиций, а по вертикали 25, 43 или 50 позиций в зависимости от типа видеоадаптера, установленного в компьютере, и используемых в конкретный момент параметров текстового режима.

Экран в текстовом режиме.

Turbo Pascal позволяет выводить текстовую информацию в рамках не всего экрана, а только в пределах его определенной части (окна). Для этого служит процедура модуля CRT Window(x1,y1,x2,y2:byte).

Параметры x1,y1 - координаты левого верхнего угла окна, x2,y2 - координаты правого нижнего угла окна. Верхний левый угол экрана имеет координаты (1,1). Если координаты в процедуре Window являются недопустимыми, то эта процедура игнорируется.

По умолчанию устанавливается размер окна равный всему экрану, который в зависимости от режима видеоадаптера, может быть одним из следующих:

Константа
режима
Значение Режим экрана
BW40 0 40х25 черно-белый на цветном адаптере
CO40 1 40х25 цветной на цветном адаптере
BW80 2 80x25 черно-белый на цветном адаптере
CO80 3 80х25 цветной на цыетном адаптере
Mono 7 80х25 черно-белый на монохромном адаптере
FONT8х8 256 для адаптеров EGA/VGA (43/50 строк)

Видеорежим устанавливается процедурой TextMode(константа режима). По умолчанию устанавливается режим CO80. Константа Mono представляет единственный черно-белый режим, поддерживаемый монохромным адаптером IBM PC. Константа FONT8x8 предназначена для включения 43-х или 50-ти строчного режим EGA/VGA и используется совместно с CO80.

TextMode(CO80+FONT8x8);

После установки окна процедурой Window большинство процедур и функций модуля CRT будут работать относительно его системы координат.

Пример применения процедуры Window:

 Program Test;
 Uses CRT;
 Var i:integer;
 Begin
 window(10,10,70,15);
 TextBackGround(red);
 ClrScr;  {нарисовали красное окно}
 writeln('Привет всем'); {вывели в него текст}
 readln;  {ждем нажатия клавиши Enter} 
 TextMode(CO80); {Вернулись в полноэкрнанный режим}
 ClrScr;
 for i:=1 to 3000 do write(i); 
        {вывели последовательность натуральных чисел }
 readln
 End.

В цветовом режиме цвет каждого символа на экране монитора выбирается из 16 цветов, а цвет фона из 8 цветов. Не ждите от Turbo Pascal слишком многого! Фон каждого символа можно сделать мерцающим.

Таблица. Константы цветов.

КонстантаЗначение КонстантаЗначение
Black 0 (черный) DarkGray 8 (темно-серый)
Blue 1 (синий) LightBlue 9 (светло-синий)
Green 2 (зеленый) LightGreen 10 (светло-зеленый)
Cyan 3 (голубой) LightCyan 11 (светло-голубой)
Red 4 (красный) LightRed 12 (розовый)
Magenta 5 (малиновый) LightMagenta 13 (светло-малиновый)
Brown 6 (коричневый) Yellow 14 (желтый)
LightGray 7 (светло-серый) White 15 (белый)
Blink 128 (мерцание)

Символы могут быть любого цвета из приведенного перечня, а цвет фона - только первых восьми от 0 (Black) до 7-го (LightGray).

Установка цвета символов, выводимых на экран, выполняется процедурой TextColor, цвета фона, на который будут выводится символы, - процедурой TextBackGround, а установка яркости символов процедурами LowVideo, HighVideo, NormVideo.

  • LowVideo- устанавливает бит яркости в 0:
  • HighVideo- устанавливает бит яркости в 1:
  • NormVideo- устанавливает бит яркости в значение, которое было до запуска программы..

Например:

{синий цвет фона}
TextBackGround(Blue);
{желтый цвет символов}
TextColor(Yellow);

{белый цвет символов с мерцанием}
TextColor(White+Blink);

Заметьте, что призрнак мерцания добавляется к цвету симолов как слагаемое. Цвет фона мерцать не может

Очистка экрана в текстовом режиме выполняется процедурой ClrScr. Экран при этом закрашивается текущим цветом фона (если цвет фона не установлен - то черным).

Для управления цветоами в текстовом режиме вместо вышеописанных процедур можно применить предопределенную переменную TextAttr модуля CRT. Эта переменная имеет тип byte и в каждый момент времени содержит десятичное значение, определяющее совокупность цветовых атрибутов (цвет символов, цвет фона, мерцание, яркость).

Чтобы понять механизм установки цветовых атрибутов, нужно смотреть на значение переменной TextAttr в двоичной системе счисления. Каждый из восьми бит байта этой переменной отвечает за определенный атрибут. Назначение бит переменной TextAttr показано ниже:

7-бит 6-бит 5-бит 4 бит 3-бит 2-бит 1-бит 0-бит
0-выкл
1-вкл
0-выкл
1-вкл
0-выкл
1-вкл
0-выкл
1-вкл
0-выкл
1-вкл
0-выкл
1-вкл
0-выкл
1-вкл
0-выкл
1-вкл
Мерцание Red Green Blue Яркость Red Green Blue
Цвет фона Цвет символов

Поскольку цвет символа определяется младшими разрядами, то присваивание переменной TextAttr просто значения цвета

TextAttr:=4; {красный} 

приведет к установке цвета символов красного цвета, цвет фона будет черным (нулевым), яркость символов будет низкой (нулевой) и мерцание будет отсутстовать. Двоичное предстапвление значения TextAttr будет иметь вид 410=1002=000001002


0 0 0 0 0 1 0 0
Мерцание Red Green Blue Яркость Red Green Blue
Цвет фона Цвет символов

Атрибуту яркости соответствует двоичное число 10002, которое равно десятичному 8. Атрибуту мерцания соответствует двоичное число 100000002, которое равно десятичному 128. При установке цвета фона с помощью переменной TextAttr необходимо принимать во внимание то, что цветовые константы фона имеют значения от 0 до 7, а за цвет фона отвечают не начальные биты, а биты с 4-го по 6-й. Поэтому для корректной установки цвета фона нужную константу требуется домножить на 16, что приведет к сдвигу значения цвета на четыре разряда влево и занесению этого значения в биты с 4-го по 6-й. Например:

{Цвет фона - синий}
{Цвет символов - белый}
{Мерцание - выключено}
{----------------------------}
TextAttr:=16*Blue+White;
         {фон}{синий} {белый}
{или то же самое}
TextAttr:=16*1+15;		 
		  {фон}{синий} {белый}
{или то же самое}
TextAttr:=31;				  

Ещё один пример:

{Цвет фона - зеленый}
{Цвет символов - красный}
{Мерцание - включено}
{----------------------------}
TextAttr:=16*Green+Red+Blink;
         {фон}{зеленый} {красный} {мерцание}
{или то же самое}
TextAttr:=16*2+4+128;		 
		  {фон}{зеленый} {красный} {мерцание}
{или то же самое}
TextAttr:=164;				  

вверх страницы

 

[назад] [содержание] [вперед]