Исследование видеопамяти в текстовых режимах

Учебные задания

Задание 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, только для альтернативных наборов символов  
             

СПИСОК ЛИТЕРАТУРЫ

1 Брябрин В.М. Программное обеспечение персональных ЭВМ.- М.:Наука.1988.–272 с.

2 Журден Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT / Пер. с англ. – М.: Финансы и статистика, 1992.

3 Нортон П. Персональные компьютеры фирмы IBM и операционная система MS DOS. – М.: Радио и связь, 1991. – 416 с.

4 Фигурнов В.Э. IBM PC для пользователя. – М.: Финансы и статистика, 1998. – 326 с.

5 Фролов А.В., Фролов Г.В. Аппаратное обеспечение IBM PC. В 2 ч. – М.: Диалог - МИФИ, 1992. – 208 с. (Библиотека системного программиста. Т2. Ч.1,2).

6 Фролов А.В., Фролов Г.В. Программирование видеоадаптеров CGA, EGA и VGA – М.: Диалог - МИФИ, 1992. – 288 с..(Библиотека системного программиста. Т3).

Учебное издание

Волк Владимир Константинович

Наши рекомендации