Учебные задания
Задание 1. Используя информацию области данных BIOS, определите:
тип установленного в Вашем компьютере видеоадаптера;
объем установленной видеопамяти;
номер текущего видеорежима;
число символов в строке;
размер видеостраницы (в байтах);
начальный адрес активной страницы видеопамяти;
координаты курсора для каждой из видеостраниц текущего текстового видеорежима.
Задание 2. Определите адрес машинного слова (байт символа и байт атрибутов), описывающего знакоместо экрана с заданными координатами.
Задание 3. Используя программу PEEK, выведите на экран образ активной видеостраницы (в шестнадцатеричном и текстовом форматах). Прокомментируйте результаты отображения и объясните систему кодирования видеоданных в текстовом режиме.
Контрольные вопросы
Чем ограничивается разрешающая способность видеосистемы в текстовых и графических видеорежимах?
Объясните понятия: "страница видеопамяти", "активная страница", "текущая страница". Чем ограничивается количество видеостраниц?
Опишите алгоритм вычисления адреса ячейки видеопамяти, описывающей знакоместо с заданными координатами для стандартного видеорежима № 3.
Лабораторная работа №7
ИССЛЕДОВАНИЕ СТРУКТУРЫ ТАБЛИЦ ЗНАКОГЕНЕРАТОРОВ
Учебные задания
Задание 1. Используя вектора прерываний №1Fh и №43h, определите расположение соответствующих таблиц знакогенератора.
Задание 2. Исследуйте структуру одной из таблиц знакогенератора. По данным таблицы составьте битовую матрицу, описывающую символ с заданным ASCII-кодом.
Контрольные вопросы
Каковы размерности матриц знакогенераторов для MDA, CGA, EGA, VGA?
Опишите алгоритм вычисления адреса ячейки видеопамяти, описывающей пиксел с заданными координатами для стандартного видеорежима № 4.
Контрольная работа №3
Задача 3.1. (*) Напишите программу, изменяющую размеры курсора.
Задача 3.2.(*) Напишите программу вывода в заданную "точку" экрана символа, соответствующего нажатой клавише (задаются координаты точки, цвет символа и цвет фона).
Задача 3.3. (*) Напишите программу вывода на экран изображения символа в масштабе "один пиксел ® одно знакоместо" в соответствии с одной из установленных таблиц знакогенератора.
Справочные материалы
Таблица 3.1 - Характеристики стандартных режимов работы видеоадаптеров
№ режима | Тип | Разрешение | Число цветов | Видеоадаптеры | Нач. адрес |
0, 0*, 0+ | Текстовый | 40 х 25 | 16 (п/т) | CGA,EGA,VGA | B800 |
1, 1*, 1+ | Текстовый | 40 х 25 | CGA,EGA,VGA | B800 | |
2, 2*, 2+ | Текстовый | 80 х 25 | 16 (п/т) | CGA,EGA,VGA | B800 |
3, 3*, 3+ | Текстовый | 80 х 25 | CGA,EGA,VGA | B800 | |
Графический | 320 х 200 | CGA,EGA,VGA | B800 | ||
Графический | 320 х 200 | 4(п/т) | CGA,EGA,VGA | B800 | |
Графический | 640 х 200 | CGA,EGA,VGA | B800 | ||
Текстовый | 80 х 25 | MDA,EGA,VGA | B000 | ||
8 – 0Сh | Резерв | ||||
0Dh | Графический | 320x200 | EGA,VGA | A000 | |
0Eh | Графический | 640x200 | EGA,VGA | A000 | |
0Fh | Графический | 640x350 | EGA,VGA | A000 | |
10h | Графический | 640x350 | EGA,VGA | A000 | |
11h | Графический | 640x480 | VGA | A000 | |
12h | Графический | 640x480 | VGA | A000 | |
13h | Графический | 320x200 | VGA | A000 | |
Примечания Режимы 0, 2 и 5 являются режимами с подавлением цвета. В этих режимах вместо цветного выводится полутоновое изображение с заменой множества цветов на оттенки серого цвета. Разрешающая способность видеосистемы в текстовых режимах оценивается размерами матрицы пикселов, которой описывается один символ: для CGA – 8 x 8, для EGA – 8 x 14, для VGA – 9 x 16. Режимы 0*, 1*, 2* и 3* (EGA) - это аналоги текстовых режимов 0,1,2 и 3 CGA, отличающиеся размерами матрицы описания символов (8х14). Режимы 0+, 1+, 2+ и 3+ (VGA) - это аналоги текстовых режимов 0,1,2 и 3 CGA, отличающиеся размерами матрицы описания символов (9х16). |
Таблица 3.2 - Расположение структур данных видеосистемы ПК
Начальный адрес | Длина, байт | Назначение области памяти |
Таблица векторов прерываний | ||
0000:0040 | INT 10h – указатель на видеофункции BIOS | |
0000:007C | INT 1Fh – указатель на таблицу знакогенератора для символов с кодами 127 –255 | |
0000:010C | INT 43h – указатель на таблицы знакогенератора для символов с кодами 0 – 255 (EGA/VGA) | |
Область данных BIOS | ||
0000:0410 | Флаги конфигурации. 5-й и 4-й биты определяют тип видеоадаптера: 00 – EGA; 01 – CGA 40 х 25; 10 – CGA 80 х 25; 11 – MDA | |
0000:0449 | Номер текущего видеорежима | |
0000:044A | Число символов в строке | |
0000:044C | Размер видеостраницы (в байтах) | |
0000:044E | Начальный адрес активной видеостраницы (смещение в видеосегменте) | |
0000:0450 | 8 х 2 | Координаты курсора в каждой из 8 страниц: Младший байт - № колонки, старший - № строки |
0000:0460 | Размер (форма) курсора: младший байт – № последней линии, старший байт – № первой линии | |
0000:0462 | Номер активной страницы видеопамяти | |
0000:0463 | Адрес порта контроллера ЭЛТ (3B4 или 3D4) | |
0000:0465 | Данные регистра режима CGA | |
0000:0466 | Данные регистра цветовой палитры CGA | |
0000:0484 | Число текстовых строк экрана минус единица | |
0000:0485 | Высота символа в пикселах | |
0000:0487 | 1-й байт данных о EGA. 6-й и 5-й биты определяют объем установленной видеопамяти: 00 - 64К, 01 - 128К, 10 – 192К, 11 – 256К | |
0000:0488 | 2-й байт данных о EGA | |
0000:04A8 | Адрес таблицы окружения минус единица | |
0000:0500 | Состояние печати экрана: 00h – печать окончена; 01h – экран печатается, FFh – ошибка печати | |
Видеопамять | ||
A000:0000 | 64Кб | Видеопамять в графических режимах EGA,VGA |
B000:0000 | 32Кб | Видеопамять в монохромном текстовом режиме |
B800:0000 | 32Кб | Видеопамять в цветовых текстовых режимах и в графическом режиме CGA |
П З У | ||
C000:0000 | 16Кб | ROM BIOS EGA / VGA |
Приведенные в таблице 3.3 функции BIOS EGA/VGA доступны по прерыванию №10h. Полный список видеофункций BIOS с комментариями и примерами использования приведен в электронном справочнике "Help".
Например, следующая программа вызывает функцию №00h для выбора 4-го режима работы видеоадаптера: mov ah, 0; mov al, 4; int 10h.
Таблица 3.3 - Функции BIOS, обслуживающие видеосистему
Функция | Назначение | Вход | Выход | Комментарии |
00h | Выбор режима работы видеоадаптера | AH = 00h AL = № режима | - | |
01h | Изменение размеров курсора | AH = 01h CH = верхняя граница курсора CL = нижняя граница курсора | - | CH: биты D0-D3 задают положение верхней границы курсора (0 – 15); биты D4-D5 задают тип курсора – 00 – обычный, 01 – невидимый, 10 – мигающий, 11 – быстро мигающий; биты D6, D7 – не используются |
02h | Изменение положения курсора | AH = 02h BH = № видеостраницы DH = № строки DL = № столбца | - | Для каждой видеостраницы может быть задано свое положение курсора. При активизации страницы курсор устанавливается в заданную позицию, предназначенную для вывода очередного символа. |
03h | Определение положения и формы курсора | AH = 03h BH = № видеостраницы | CH = верхняя граница курсора CL = нижняя гр. DH = № строки DL = № столбца | |
05h | Изменение активной страницы | AH = 05h AL = № страницы | - |
Продолжение таблицы 3.3
08h | Чтение символа | AH = 08h BH = № страницы | AL = ASCII-код символа AH = байт атрибутов символа | Символ читается из позиции, определенной положением курсора на заданной видеостранице | |
09h | Запись символов | AH = 09h AL = ASCII-код символа BH = № страницы BL =байт атрибутов CX = число записываемых символов | - | Записываются один или несколько одинаковых символов с одинаковыми атрибутами в заданную (активную или пассивную) страницу видеопамяти. Запись производится начиная с позиции, заданной текущим положением курсора на этой странице. После завершения операции положение курсора не изменяется. | |
0Ch | Запись пиксела | AH = 0Ch AL = № цвета BH = № страницы CX = X DX = Y | - | ||
0Dh | Чтение пиксела | AH = 0Dh BH = № страницы CX = X DX = Y | AL = номер цвета пиксела | ||
0Fh | Определение текущего режима работы видеоадаптера | AH = 0Fh | AH = число символов в строке AL = № текущего режима BH = № активной страницы | ||
Продолжение таблицы 3.3
11h | Загрузка таблиц знакогенератора. Данная функция содержит 11 подфункций, основные из которых описаны ниже | ||||
П/ф 00h | Загрузка пользовательского набора символов | AH = 11h AL = 00h, 10h ES:BP = начальный адрес набора символов CX = число символов в наборе DX = № 1-го заменяемого символа в таблице ЗГ BL = № таблицы ЗГ BH = число байтов на символ в таблице (1 - 32) | - | Функция заменяет текущий набор символов или его часть набором, определяемым пользователем. Новый набор символов должен быть загружен в память до вызова функции | |
П/ф 01h | Загрузка набора символов EGA (8х14) | AH = 11h AL = 01h, 11h BL = № загружаемой таблицы ЗГ | - | Функция загружает стандартный набор символов из ПЗУ BIOS во второй цветовой слой видеопамяти | |
П/ф 02h | То же для стандартного набора символов CGA 8 x 8 (AL = 02h,12h) | ||||
П/ф 04h | То же для стандартного набора символов VGA 9 x 16 (AL = 04h,14h) |
Окончание таблицы 3.3
П/ф 20h | Установка вектора прерывания 1Fh | AH = 11h AL = 20h ES:BP = адрес таблицы символов (с кодами от 127 до 255) | - | Используется в графических режимах №4,5 и 6, совместимых с CGA, если необходимо отображать одновременно более 128 различных символов. Размер символов в таблице должен быть 8х8 | ||
П/ф21h | Установка вектора прерывания 43h | AH = 11h AL = 21h ES:BP = адрес таблицы символов пользователя CX = байтов на символ BL = число строк на экр. | - | BL = 0 – число строк содержится в регистре DL 1 – 14 строк 2 – 25 строк 3 – 43 строки | ||
П/ф 30h | Получение информации об используемом наборе символов | AH = 11h AL = 30h BH – код вида запрашиваемой информации (0-7) | CL = высота символа DL = число текстовых строк на экране минус 1 ES:BP = указатель (см. BH=) | Виды запрашиваемой информации (BH): 0 – вектор INT 1Fh; 1 - вектор INT 43h; 2 – указатель на основной набор символов 8х8; 3 – то же для 8х14; 4 - то же для 9х16; 5, 6 и 7 – то же, что 2, 3 и 4, только для альтернативных наборов символов | ||