Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВССиТ / МУ-Программирование устройств-ПЗ.docx
Скачиваний:
42
Добавлен:
28.03.2015
Размер:
243.95 Кб
Скачать

4.4.2 Управление курсором

Курсор служит двум целям: 1) служит указателем места на экране для вывода информации и 2) обеспечивает видимую точку отсчёта на экране для пользователя программы. Если видеоадаптер поддерживает работу с несколькими дисплейными страницами, то каждая страница имеет свой собственный курсор. Информация о курсоре хранится в двухбайтовой переменной: младший байт содержит номер столбца (начиная с 0), старший байт – номер строки (начиная с 0). Абсолютные координаты курсора могут меняться в пределах 25 строк и 80 (иногда 40) столбцов. При этом координаты 0,0 определяют левый верхний угол экрана.

1) Установка/ чтение позиции курсора /1-5/.

1.1) Функция 2h (пересылается в AH) прерывания 10h устанавливает курсор, относящийся к указанной дисплейной странице, в абсолютную позицию, которая будет являться начальной для последующего вывода информации. Страницы нумеруются, начиная с 0 (0 – текущая дисплейная страница). При этом, в регистр DH помещается позиция курсора по строке, в регистр DL – позиция курсора по столбцу, а в BH – номер дисплейной страницы. После обработки прерывания курсор меняет своё положение на экране, если установка курсора относится к текущей активной дисплейной странице.

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

1.2) Для получения текущей позиции курсора необходимо в регистр AH поместить функцию 3h, в BH – номер дисплейной страницы и вызвать прерывание 10h. После обработки прерывания в регистре DH будет находиться положение курсора по строке, в регистре DL – положение курсора по столбцу.

2) Включение/ отключение курсора /1-5/.

Ассемблерные программы оставляют курсор включённым до тех пор, пока не указано обратное. ОС не предоставляет специальных средств отключения курсора, но это легко сделать с помощью функции 2h прерывания 10h, поместив за пределы экрана, например, в первую позицию 26- ой строки (координаты DL = 0, DH = 25). Соответственно, чтобы сделать его снова видимым, надо вернуть курсор в пределы экрана текущей активной страницы.

4.4.3 Вывод точечной графики

Различные видеоадаптеры: монохромный MDA - Monochrome Display Adapter, CGAColor Graphics Adapter (Цветной графический адаптер), EGA -  Enhanced Graphics Adapter (Усовершенствованный графический адаптер), VGA - Video Graphics Array (Видеографическая матрица) по-разному работают с цветом и графикой.. Адаптеры EGA, VGA поддерживает работу в монохромном и CGA-совместимом режимах. Более того, эти режимы поддерживаются как на монохромных, так и на цветных мониторах. Обращения к функциям BIOS (прерывание 10h) совместимы между различными типами IBM-(и совместимых с IBM) адаптеров. Оригинальные программы, позволяющие использовать особенности каждого типа видеоадаптеров, связаны с применением других прерываний и регистров портов адаптеров, и являются достаточно сложными /1-5/. Поэтому операции, связанные с выводом точечной графики рассмотрим на примере функций прерывания 10h.

Изображение на экране растрового дисплея формируется посредством группы горизонтальных строк, называемых растром. Каждая точка (пиксель) цветного экрана состоит из трёх цветных точек: красной, зелёной, синей (RGB – Red Green Blue).

В графическом режиме могут выводиться и символы. Однако они создаются не обычным способом: BIOS вырисовывает их по точкам, не изменяя цвета фона. Поэтому негативное изображение и мигание символов недоступны в графическом режиме. Не выводится и курсор.

1) Установка цвета фона /1-5/.

Функция 0Bh (пересылается в AH) прерывания 10h позволяет установить цвет фона. Для этого в регистр BH записывается 0, в регистр BL – номер цвета от 0 до 15 (Таблица 4.7).

2) Вывод точки на экран /1-5/.

Функция 0Ch (пересылается в AH) прерывания 10h устанавливает на экране точку. В регистр CX необходимо поместить координату по строке (по горизонтали), в DX – координату по столбцу (по вертикали). Они отсчитываются от 0. Код цвета помещается в регистр AL. При отсутствии ошибок на экране формируется точка указанного цвета в указанной позиции.

3) Чтение точки с экрана /1-5/.

Функция 0Dh (пересылается в AH) прерывания 10h позволяет прочитать точку для определения её цвета. В регистр CX необходимо поместить координату по строке (по горизонтали), в DX – координату по столбцу (по вертикали). После обработки прерывания цвет указанной точки возвращается в регистре AL.