Скачиваний:
34
Добавлен:
15.09.2014
Размер:
240.09 Кб
Скачать

Лабораторная работа № 1 «Работа с видеоадаптером в текстовом режиме»

Лабораторная работа № 2 «Работа с видеоадаптером в графическом режиме»

Для вывода информации на экран используются следующие аппаратные средства: видеоадаптер и монитор (экран).

Сам видеоадаптер состоит из двух частей: контроллера ЭЛТ (электроннолучевой трубки) и видеопамяти (видеобуфера). Основная задача видеобуфера - хранение образа информации экрана. Изображение на экране строиться из набора пикселов (элементы покрытия экрана). Сами пикселы объединяются в телевизионные строки.

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

Важной характеристикой работы видеоадаптера является количество поддерживаемых им режимов. Под режимом можно понимать работу адаптера, с какими то особыми свойствами (вывод информации на экран, число поддерживаемы строк и т.д.). Режимы нумеруются с нуля (адаптер работающие в современных режимах поддерживают работу и в старых режимах). MDA (монохромный видеоадаптер) самый старый. Он может работать в режимах 0 и 1. После него появился CGA (цветным графическим адаптером) (работает в режимах 0 - 6). Следующий за CGA появился EGA (улучшенный цветной дисплей) адаптер. Он поддерживает режимы, начиная с 0 и заканчивая 10h. Режимы, которые начинаются с 11h и выше поддерживает VGA – адаптер.

Все возможные режимы работы видеоадаптеров можно разделить на две категории: текстовые и графические. Переключение из графического режима работы в текстовый режим и обратно полностью меняют логику работы видеоадаптера с видеобуфером.

При работе видеоадаптера в текстовом режиме весь экран рассматривается как набор элементов (текстел). Каждому такому элементу соответствует два байта видеобуфера. Четный байт содержит ASCII-код символа, а нечетный байт – его атрибуты (цвет очертания пикселя, цвет фона).

Таблица 1 - Основные характеристики режимов работы видеоадаптера

Режим

Тип

Число

 

Разрешение

 

 

Начало

 

Максималь-

Поддерживаем

 

 

 

 

ное число

ые работы

цветов

 

 

видеобуфера

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

страниц

дисплеи

0, 1

Text

16

 

 

 

40х25

 

 

 

b8000h

 

8

CGA EGA

 

 

 

 

 

 

 

VGA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Text

16/64

 

 

40х25

 

 

 

b8000h

 

8

EGA VGA

 

Text

16/64

 

 

40х25

 

 

 

b8000h

 

8

VGA

2,3

Text

16

 

 

 

80х25

 

 

 

b8000h

 

4

CGA

 

Text

16/64

 

 

80х25

 

 

 

b8000h

 

8

EGA VGA

 

Text

16/64

 

 

80х43

 

 

 

b8000h

 

8

EGA

 

Text

16/64

 

 

80х50

 

 

 

b8000h

 

8

VGA

 

Text

16/64

 

 

80х25

 

 

 

b8000h

 

8

EGA VGA

 

Text

16/64

 

 

80х25

 

 

 

b8000h

 

8

VGA

4,5

Графический

4

 

 

 

320х200(гр.)

 

 

b8000h

 

1

CGA EGA

 

 

 

40х25(текс.)

 

 

 

VGA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

Графический

2

 

 

 

640х200(гр.)

 

 

b8000h

 

1

CGA EGA

 

 

 

80х25(текс.)

 

 

 

VGA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

Text

Моно

 

 

80х25

 

 

 

B0000h

 

1,4

EGA VGA

Dh

Графический

16/64

 

320х200(гр.)

 

 

A0000h

 

8

EGA VGA

 

40х25(текс.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Eh

Графический

16/64

 

640х200(гр.)

 

 

A0000h

 

4

EGA VGA

 

80х25(текс.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fh

Графический

Моно

 

640х350(гр.)

 

 

A0000h

 

2

EGA VGA

 

 

 

 

 

 

80х25(текс.)

 

 

 

 

 

 

 

 

 

 

10h

Графический

16/64

 

640х350(гр.)

 

 

A0000h

 

2

EGA VGA

 

80х25(текс.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11h

Графический

2

 

 

 

640х480(гр.)

 

 

A0000h

 

1

VGA

 

 

 

80х30(текс.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12h

Графический

16

 

 

640х480(гр.)

 

 

A0000h

 

1

VGA

 

 

80х30(текс.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13h

Графический

256

 

320х200(гр.)

 

 

A0000h

 

1

VGA

 

40х25(текс.)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Номер бита

 

 

 

 

 

 

 

 

7

6

5

 

4

3

2

1

 

0

 

 

 

 

 

 

Bl

 

r

 

g

 

B

 

i

 

r

g

 

b

 

 

 

 

 

 

 

 

Цвет фона

 

 

 

цвет символа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мерцание символа(1 – включено, 0 - выключено) Яркость символа (1 – повышенная, 0 - нормальная)

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

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

имеет смещение 4К байт. При изменении начального смещения происходит переключение страницы, т.е. обновляется экран.

Работая в графическом режиме, мы управляем цветом выводимого пиксела. Сам экран представляет собой матрицу пикселов. Число строк и столбцов пикселов зависит от текущего режима работы видеоадаптера. В процессе работы видеоадаптер хранит коды цветов пикселов в видеобуфере.

В режимах 4 – 6 можно напрямую обратиться к видеопамяти (эти режимы называются CGA режимы). В режимах 4 и 5 (320х200) пикселы могут отображаться 4 различными цветами. Поэтому для кодирования одного пиксела достаточно 2-х бит. Т.о. в одном байте можно хранить информацию сразу о 4-х пикселах. Следовательно на хранение всего экрана требуется 16 000 байт. В 6 режиме поддерживается только два цвета и поэтому на хранение одного пиксела требуется 1 бит. При разрешении 640х200 потребуется тоже 16000 байт видеопамяти. Есть также и особенность хранения пикселов. Коды пикселов нечетных и четных телевизионных строк в видеобуфере CGA адаптера оказываются сгруппированными в два массива: по смещению 0 от начала памяти видеостраницы располагаются коды пикселов четных строк (0,2,4, ….); начиная с 2000h располагаются коды нечетных строк (1,3,5, …).

При работе адаптера в графических EGA-режимах (0Dh – 10h) меняется логика использования видеопамяти адаптера. Теперь каждому пикселу соответствует 4 бита в видеопамяти. Таким образом можно отобразить 16 цветов. Одному и тому же адресу соответствует 4 байта на битовых планах (I-, R-, G-, B- планы). Эти 4 байта в совокупности кодируют 8 смежных пикселов одной телевизионной строки. Любому пикселу экрана соответствует один бит на каждом из планов.

Этот код цвета пиксела (для EGA-режима) – это номер одного из 16 специальных внутренних регистров адаптера, которые называются регистрами палитры. Регистры палитры EGA-адаптера шестиразрядные, и могут задавать один из 64 возможных цветов.

Структура этого регистра следующая:

r g b R G B

Строчные буквы определяют половинную интенсивность нормального цвета (r – красный, g – зеленый, b - голубой), а прописные – нормальную интенсивность соответствующего цвета. Результирующий цветовой сигнал образуется сложением сигналов цвета, управляемых каждым из 6 бит кода цвета. В результате для каждого из основных цветов существует три градации цвета: половинная, нормальная и полуторная.

VGA – адаптер использует подобную схему преобразования кода цвета пиксела в реальный цвет на экране, но значение в регистре палитры задает номер DAC-регистра (регистра цифро-аналогово преобразователя). Это

происходит потому что для VGA – адаптеров используются аналоговые мониторы, а не цифровые. На вход аналогового монитора подается аналоговый сигнал (уровень напряжения), соответствующий яркости основных цветов: красного, зеленого и голубого. Монитор получает шесть сигналов типа «вкл/выкл» в соответствии с шестибитовым кодом, записанным в регистре палитры. Цифро-аналоговый преобразователь имеет в своем составе 256 трехбайтовых внутренних регистров (по одному байту для красного, зеленого и синего цветов). Шесть бит байта кодируют уровень интенсивности цвета (26 = 64 оттенка яркости). Таким образом, число возможных цветов формируемых

VGAадаптером равно 64 * 64 * 64 = 262 144 цвета.

В режиме 13h можно отображать сразу 256 цветов, используя для кодирования цвета одного пиксела целый байт видеопамяти. Так как максимальное разрешение для 13h режима составляет 320х200 следовательно под видеопамять требуется 320х200 = 64 000 байт видеопамяти. Так же как и в CGA–режимах для данного режима есть возможность напрямую работать с видеобуфером. Однако в режиме 13h, как и в EGA – режимах, коды всех пикселов расположены начиная с адреса А0000h. Коды всех пикселов расположены в памяти подряд, без разделения на четные и нечетные строки.

Программирование видеопамяти

Работа с видеоадаптером может осуществляться тремя способами:

На уровне MS-DOS с использованием функций прерывания 21h;

На уровне BIOS с использованием функций прерывания 10h;

Непосредственным доступом в видеопамять.

Самым скоростным способом вывода информации на экран считается непосредственный доступ к портам и видеопамяти. Этот способ самый быстрый, но он и требует больше труда программиста.

Использование функций BIOS предпочтительней, так как это безопасней и надежнее. Таким образом, если были заданы некорректные значения параметров, функции BIOS не выполнят никаких действий. Драйверы MS-DOS сами используют функции BIOS для вывода информации на экран.

Использование функций 10-го прерывания BOIS.

Рассмотрим описание некоторых функций 10 прерывания BIOS, которая предназначена для работы с видеоадаптером.

00h - Выбор режима работы

01h - Изменение формы курсора

02h - Изменение положения курсора

03h - Определение положения и формы курсора

05h - Изменение активной страницы видеопамяти

06h - Свертка текстового окна вверх

07h - Свертка текстового окна вниз

08h - Чтение символа и его атрибутов

09h - Запись символа с атрибутами в текущей позиции курсора

0Ah - Запись символа в текущей позиции курсора

0Ch - Вывод пиксела

0Dh - Чтение пиксела

0Eh - Определение текущего режима работы видеоадаптера

Функция 00h (Выбор режима работы)

Функция 00h прерывания 10h устанавливает заданный режим Х работы видеоадаптера:

На входе:

AH = 00h;

AL = номер устанавливаемого режима работы видеоадаптера, если бит D7 = 1, то при установке режима видеопамять не очищается;

На выходе: Не используются.

Пример:

_AH = 0x00; _AL = Х;

geninterrupt(0x10);

Функция 01h (Изменение формы курсора)

Функция 01h позволяет изменить вертикальные размеры курсора путем задания верхней и нижней границ курсора. Горизонтальные размеры курсора всегда одинаковы и равны ширине одного символа.

Курсор отображается только в текстовых режимах работы видеоадаптера.

На входе:

AH = 00h - изменение размеров курсора;

CL = нижняя граница курсора (0-31);

CH = верхняя граница курсора:

o

D3-D0

верхняя граница курсора

o

D5-D4

00b - обычный курсор

o

01b - невидимый курсор

o 10b - мигающий курсор

o 11b - быстро мигающий курсор o D7-D6 не используются;

На выходе: Не используются.

Функция 02h (Изменение положения курсора)

Функция 02h задает текущее положение курсора на экране дисплея. Если видеопамять разделена на несколько страниц, то каждая из них

имеет свой курсор, координаты которого можно устанавливать отдельно. Координаты курсора определяют не только место на экране, где он

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

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

На входе:

o AH = 03h - определение размеров и координат курсора; o BH = номер страницы видеопамяти.

На выходе:

o CH = верхняя граница курсора; o CL = нижняя граница курсора;

o DH = позиция текущей строки курсора; o DL = позиция текущего столбца курсора.

Пример: _AH = 0x02; _BH = 0; _DH = (char)y; _DL = (char)x;

geninterrupt(0x10);

Функция 03h (Определение положения и формы курсора)

Функция 03h позволяет узнать размер и текущие координаты курсора для любой страницы видеопамяти:

На входе:

o AH = 03h - определение размеров и координат курсора o BH = номер страницы видеопамяти.

На выходе:

o CH = верхняя граница курсора; o CL = нижняя граница курсора;

o DH = позиция текущей строки курсора; o DL = позиция текущего столбца курсора.

Пример: _AH = 0x03; _BH = 0;

geninterrupt(0x10); y = _DH;

x = _DL;

Функция 05h (Изменение активной страницы видеопамяти)

Функция 05h позволяет изменить активную страницу видеопамяти. Активная страница видеопамяти отображается на экране.

На входе:

o AH = 05h - выбор активной страницы видеопамяти;

o AL = номер страницы видеопамяти, которая станет активной.

На выходе: Не используются.

Функция 06h (Свертка текстового окна вверх)

Свернуть активное окно экрана вверх (при работе в текстовом режиме) можно при помощи функции 06h. Окно задается координатами верхнего левого и нижнего правого углов. При свертке окна снизу появляются новые пустые строки (строки, заполненные пробелами), а верхние строки исчезают. Область экрана вне окна не изменяется.

На входе:

o AH = 06h - свертка окна вверх;

o AL = число прокручиваемых линий, если оно равно нулю, то окно прокручивается целиком;

o BH = атрибут, используемый для строк, возникающих снизу окна; o CH = номер строки верхнего левого угла окна;

o CL = номер колонки верхнего левого угла окна; o DH = номер строки нижнего правого угла окна; o DL = номер колонки нижнего правого угла окна;

На выходе: Не используются.

Функция 07h (Свертка текстового окна вниз)

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

На входе:

o AH = 07h - свертка окна вниз;

oAL = число прокручиваемых линий, если оно равно нулю, то окно прокручивается целиком;

oBH = атрибут, используемый для строк, возникающих в верхней части окна;

o CH = номер строки левого верхнего угла окна; o CL = номер колонки левого верхнего угла окна; o DH = номер строки правого нижнего угла окна; o DL = номер колонки правого нижнего угла окна;

На выходе: Не используются.

Функция 08h (Чтение символа и его атрибутов)

Данная функция позволяет прочитать символ и его атрибуты из позиции экрана, определенной текущим положением курсора. После выполнения функции ASCII-код считанного символа присваивается переменной х. Чтение можно производить как из активной, так и из неактивных страниц памяти:

На входе:

o AH = 08h - чтение символа и его атрибутов; o BH = номер страницы видеопамяти.

На выходе:

o AL = ASCII-код символа;

o AH = байт атрибутов символа.

Пример: _AH = 0x08; _BH = 0;

geninterrupt(0x10); х = _AL;

Соседние файлы в папке Видеоадаптер
  • #
    15.09.2014240.09 Кб34Lab1_2.pdf
  • #
    15.09.201485.45 Кб25Лабораторные работы.mht