Лабораторна робота № 3
ТЕМА: Програмування режимів EGA та VGA відеоадаптера
МЕТА: Набути навичок роботи з відеоадаптером у режимах EGA та VGA, а також використання засобів BIOS для роботи з відеопам’яттю.
Короткі теоретичні відомості
Для роботи з відеоадаптером в BIOS відведено три функції переривання 10h. Функція 00h призначена для встановлення режима дисплея (для виклику: AH = 00h, AL = номер режима); функція 05h – вибір активної дисплейної сторінки (для виклику: AH = 05h, AL = номер відеосторінки); функція 0Fh – визначення стану відеосистеми (для виклику: AH = 0Fh; повертає: AH = кількість символьних столбців, AL = номер режима, BH = номер активної відеосторінки).
ЗАВДАННЯ
Розробити та відлагодити програму, яка:
переводить дисплей в заданий користувачем відеорежим;
забезпечує можливість перемикання відеосторінок;
виводить на екран інформацію про стан відеосистеми.
ПИТАННЯ ДЛЯ САМОКОНТРОЛЮ
Яка базова адреса текстової відеопам’яті?
Скілький відеосторінок має текстова відеопам’ять?
Яку інформацію зберігає дескриптор сегменту?
Який об’єм (розмір) відеосторінки текстової відеопам’яті?
Що таке таблиця глобальних дескрипторів?
Чи можна модифікувати сегменти команд в захищеному режимі під час виконання програми?
Яке призначення тіньових регістрів? Чи доступні вони програмісту?
Що таке регістр таблиці глобальних дескрипторів?
Які таблиці треба підготувати для виходу в захищений режим?
У який спосіб можна повернутися з захищеного режиму до реального?
Засоби BIOS для роботи з відеоадаптером.
BIOS здійснює свою роботу з відеоадаптером через переривання INT 10h.
Функції INT 10h
00h –вибір режиму роботи;
01h – задання форми курсора;
02h – задання позиції курсора;
03h – визначення положення й форми курсора;
04h – використання світового пера;
05h – задання активної сторінки відеопам`яті;
06h – прокрутка вікна вгору;
07h – прокрутка вікна вниз;
08h – читання символу і його атрибутів у поточній позиції курсора;
09h – запис символу з атрибутами у поточну позицію курсора;
0Ah – запис символу з тим атрибутом, який був у позиції курсора;
0Bh – установлення кольорової палітри (режим 4,5,6);
0Ch – вивід пікселя на екран;
0Dh – читання пікселя;
0Eh – вивід символів у режимі телетайпа;
0Fh – визначення поточного режиму роботи відеоадаптера;
10h – керування регістрами палітри. Має підфункції;
11h – завантаження таблиці знакогенератора. Має 11 під функцій;
12h – визначення конфігурації й вибір програми друку екрана;
13h – вивід текстового рядка;
1Ah – читання/запис конфігурації відеосистеми;
1Bh – отримання даних про стан VGA;
1Ch –зберігання/встановлення стану відеоадаптера.
Режими дисплея.
Номер
Режим
0
1
2
3
4
5
6
7
8
9
40х25(320х200) – алфавітно-цифровий, монохромний;
40х25(320х200) – алфавітно-цифровий, кольоровий;
80х25(640х200) – алфавітно-цифровий, монохромний;
80х25(640х200) – алфавітно-цифровий, кольоровий;
320х200 4-х кольорова графіка;
320х200 алфавітно-цифровий і графіка;
640х200 кольорова графіка;
720х350 алфавітно-цифровий;
160х200 16-кольорова графіка;
320х200 16-кольорова графіка;
Функции BIOS – Int 10h – упарвление экраном
Для управления экраном имеются следующие функцыи:
Функция Назначение
----------------------------------------------------------------------------------
00H Задание видеорежим
01H Задание формы курсора
02H Задание позицию курсора
03H Чтение позиции иформы курсора
04H Чтение позиции световое перо
05H Выбрать активную страницу дисплея
06H Листать окно вверх (или очистить)
07H Листать окно вниз
08H Читать символ/атрибут
09H Писать символ/атрибут
0aH Писать символ
0bH Выбрать палитру/цвет бордюра
0cH Писать графическую точку
0dH Читать графическую точку
0eH Писать символ в режиме TTY
0fH Читать видео режим
10H Установка регистров палитр( PCjr, EGA,VGA,MCGA)
11H Управление знакогенератор (EGA, VGA,MCGA)
12H Выбор альтернативы (EGA, VGA,MCGA)
13H Выбор строки на экран (многие ПЭВМ )
14H Упаравление плазменным дисплеем ( Convertible )
15H Чтение параметров активонго дисплея ( Convertible )
1AH Чтение/вывод кода комбинации дисплеев ( PS/2 )
1BH Чтение функциональной информации ( PS/2 )
1CH Сохранение/восстановление состояенмия дисплея(VGA)
Примечание. Функции 00-0FH поддерживаються BIOS всех ПЭВМ ( единственное исключение состоит в том, что BIOS не поддерживает графический режим монохромного адаптера Hercules).Остальные функции реализеются только теми адаптерами и теми ПВЭМ, которые указаны в скобках после их описания ( под-робная информацыя о каждой ункции приведена ниже ).
Функция 00h –задание видеорежима
Вход: АН = 00h
AL = ноер видеорежима
Выхода: нет
Описание: Изменяет режим экрана на заднный в AL.Подробное описание видеорежиов, поддерживаемых BIOS, приведено в п. 7.2.
Примечания.
В некоторых версиях BIOS эта ф-н разрушает регистры АХ,
SP, BP, SI, и DI .
При смене видеорежима экран очищается. Мы не рекомендуем использовать эту ф-н для очистки экрана, т. к. она работает довольно долго ( см. ф-н 06h и 07h ). HCjr, EGA, VGA, MCGA и PS Convertible можно сменить видеорежим без очистки экрана, если установить старший бит AL.
В графических режимах курсор не отображается на экране
( кроме VGA, где возможна эмуляция графического курсора – см.
ф-н 12h).
Смена видеорежима изменяет форму курсора.
Режимы 0, 2 и 5 для RGB-монитор эквивалентны режимам 1, 3 и 4 соответветственно.Для композитных ( дешовых и устаревших )
мониторов они отличаются тем, что в режымах 0, 2 и 5 запрещена генерацыя цветов, т. е. эти режими являются чёрно-белыми.
Для чтения текущего видеорежима используйте ф-н Ofh.
При включении ПВЭЬ устанавливаются следующие видеорежи-мы:
CGA, PCjr, MCGA - 3 ;
MDA - 7 ;
EGA, VGA - 3 или 7 в зависимости от диспле;
PC Convertible - 2 ли 7 в зависимости от дисплея.
Для всех видеорежимов, кроме 13h:
- в MCGA инициализируется только первые 16 регистров цвета, а
остальные 240 остаются неопределенными;
- в VGA инициализируется только первые 64 регистров цвета, а
остальные 192 остаются неопределенными;
Для смены вертикального разрешения экрана VGA в текстовом режиме ( 200, 350 или 400 ) используйте ф-н 12h c BL=30h.
Cм. также: Int 10h, ф-н 06h
Int 10h, ф-н 07h
Int 10h, ф-н 0Fh
Int 10h, ф-н 12h
INT 10h,00h - установка специального режима (Paradise VGA)
Вход: AX = 007Eh
BX = горизонтальный размер желаемого режима
CX = вертикальный размер желаемого режима (BX/CX задаются в пикселях для графических режимов, в строках для текстовых)
DX = число цветов желаемого режима (0 для монохромных
режимов)
Выход:
BH = 7Eh - успешное завершение операции
INT 10h,00h - расширенные функции (Paradise VGA)
Вход:
AX = 007Fh
BH = 00h - установить режим VGA
BH = 01h - установить режим не-VGA
Цветные режимы (0, 1, 2, 3, 4, 5, 6) установят режим CGA (не-VGA).Монохромный режим 7 установит режим MDA/Hercules (не-VGA).
BH = 02h - проверить статус режима
BH = 03h - фиксировать текущий режим. Позволяет текущему режиму(VGA или не-VGA) "пережить" перезагрузку.
BH = 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh - запись в регистры
соответственно 0,1, 2, 3, 4, 5 (для порта 03CEh индексы - A, B, C, D, E, F)
BL = значение, заносимое в регистр
BH = 1Ah,1Bh,1Ch,1Dh,1Eh,1Fh - чтение из регистров
соответственно 0,1, 2, 3, 4, 5 (для порта 03CEh индексы - A, B, C, D, E, F)
Выход:
- для подфункции 02h:
BL = 0 - если функционирует в режиме VGA, 1 - если режим
не-VGA.
CH = общий размер телеОЗУ в 64Кбайтных банках
CL = размер телеОЗУ, используемого текущим режимом
BH = 01h - установить режим не-VGA
Цветные режимы (0, 1, 2, 3, 4, 5, 6) установят режим CGA (не-VGA).Монохромный режим 7 установит режим MDA/Hercules (не-VGA).
BH = 02h - проверить статус режима
BH = 03h - фиксировать текущий режим. Позволяет текущему режиму
(VGA или не-VGA) "пережить" перезагрузку.
BH = 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh - запись в регистры соответственно 0,1, 2, 3, 4, 5 (для порта 03CEh индексы - A, B, C, D, E, F)
BL = значение, заносимое в регистр
BH = 1Ah,1Bh,1Ch,1Dh,1Eh,1Fh - чтение из регистров соответственно 0,1, 2, 3, 4, 5 (для порта 03CEh индексы - A, B, C, D, E, F)
Выход: - для подфункции 02h:
23
BL = 0 - если функционирует в режиме VGA, 1 - если режим не-VGA.
CH = общий размер телеОЗУ в 64Кбайтных банках
CL = размер телеОЗУ, используемого текущим режимом
- для подфункций 1Ah - 1Fh:
BL = значение, прочитанное из регистра
BH = 7Fh - если операция завершена успешно
Функция 01h - установка границ курсора (текстовой режим)
Вход: AH = 01h
CH = биты 0-4 - начальная линия биты 5-6 - атрибуты
курсора:
00 = обычный, 01 = невидимый,
10 = медленное мерцание, 11 = быстрое мерцание
CL = биты 0-4 - конечная линия курсора
Выхода: нет
Описание: Из меняет форму экранного курсора. Допустимые значения CH и CL зависят от адаптера:
Адаптер Допустимы По умолчанию
CGA 0 - 7 6 - 7
MDA 0 - 13 11 - 12
EGA 0 - 13 зависит от режима
VGA 0 - 15 зависит от режима
Примечания:
1. Под линиями здесь понимаются строки телевизионной
развертки, образующие изображение на экране. Нумерация
линий здесь начинается сверху блока символа. Если вы укажете
конечную линию, меньшую начальной, курсор получится
состоящим из двух частей.
2. Для всех видеостраниц определяется один и тот же курсор.
Мерцание курсора организовано аппаратурно и не может быть отменено.Не рекомендуется устанавливать биты 5 и 6 - это может дать странные результаты. Чтобы сделать курсор невидимым, функцией 02h спозиционируйте его на 25 строку.
Функция действует только для текстовых режимов - в афических режимах аппаратно поддерживаемый курсор отсутствует.
24
В системах с EGA имеется ошибка - BIOS изменяет форму курсора в режимах с 43 строками, однако возвращает нформацию о неизмененной форме курсора.
6. Узнать текущую форму курсора можно с помощью 03h.
7. Функция не сохраняет значений регистров AX, SP, BP, SI и DI.
8. Для PS/2, модель 39 ( MCGA ) в регистры контроллера ЭЛТ засылаються такие зазмеры курсора: 2*CH и 2*CL+1.
Функцыя 02h - установка позиции курсора
Вход: AH = 02h
BH = номер видеостраницы ( 0 - ? )
DH= строка ( 0 - 24 )
DL = столбец ( 0 –39 или 79 )
Выхода: нет
Описание: Позиционирует курсор дисплейной страницы BH в заданую строку столбец.
Примечания:
В некоторых версиях BIOS эта ф-н разрушает регистры AX, SP, BP, SI, и DI .
Вы можете изменить позицию курсора как в активной, так и
неактивной стоанице дисплея.
В графических режимах эта ф-н изменяет логическую позицию
курсора, хотя он и невидим.
Функция позиционирует курсор как в активной, так и в
неактивной видеостранице.
В графических режимах функция устанавливает только
логическое положение курсора.
Чтобы сделать курсор невидимым, задайте его позицию в 25
строке.
Левый верхний угол экрана имеет координаты (0,0), а правый
нижний - (24,39) для режимов с 40 колонками и (24,79) для режимов с 80 колонками.
Функция не проверяет номер страницы на правильность, при
ошибочном DH,DL = строка,столбец.
Функция 03h - чтение позиции и размеров курсора
Вход: AH = 03h
BH = номер видеостраницы ( 0-7 )
Выход: DH,DL = текущие строка ( 0 - 24) и
столбец( 0 – 39 или 79 ) курсора.
25
CH,CL = текущие начальная и конечная линии
курсора (0-1Fh).
Описание: Сообщает текущую позицию и форму курсора для дисплейной страницы BH.
Примечания:
В некоторых версиях BIOS эта ф-н разрушает регистры AX, SP, BP, SI, и DI .
Функция не проверяет номер страницы на правильность, при ошибочном задании могут быть странные результаты. В описании функции 05h приведены правильные границы для значения номера видеостраницы.
2. Функция выдает позицию курсора как для активной, так и для
неактивной страницы. Для графических режимов функция выдает
логическую позицию курсора.
3. Поскольку аппаратно поддерживаемый курсор один, функция
выдает его размеры независимо от указанного номера страницы.
В ранних версиях монохромного адаптера (MDA) и адаптера
Compaq имелась ошибка. После инициализации адаптера (при
включении машины или изменении режима) функция выдавала
ошибочные размеры курсора: для монохромного адаптера вместо
0Bh-0Ch выдавалось 6-7, а для Compaq выдавалось 0-67h для
любого режима дисплея. Если вы устанавливали сами размеры
курсора функцией 01h, то функция далее выдавала правильные
значения.
Функция 04h - чтение состояния и позиции светового пера
Вход: AH = 04h
Выход: AH = 0 - световое перо не активизировалось,
1 - в регистрах возвращены значения
DH,DL = строка(0-24), столбец(0-39 или 79) символа
BX = столбец пикселя (0-319 или 0-639)
CH = строка пикселя (0-199)
CX = строка пикселя (0-nnn) для режимов 0Fh-10h
Описание: Сообщает позицию светового пера и его состояние (нажата или нет кнопка светового пера). Поскольку световое перо можно считать морально устаревшим устройством, полезность этой ф-н невилика.
26
Примечания:
1. Местоположение светового пера возвращается в двух формах: как
позиция символа в DX и как позиция пикселя в BX и CX.
Координаты пикселя позиции светового пера не точны.
Координату X всегда необходимо умножить на 2, Y умножить на
4 для режима 320х200 и на 8 для режима 640x200.
3. Функция не сохраняет значений регистров AX, SP, BP, SI и DI.
Функция 05h - выбор активной страницы экрана
Вход: AH = 05h
AL = номер выбираемой страницы(0-?)
Выхода: нет
Описание: Задаёт новую страницу дисплея AL.
Возможные значения номера страницы:
Режим Режим
00h 0-7 08h 0
01h 0-7 09h 0
02h 0-3 0Ah 0
03h 0-3 0Dh 0-7
04h 0 0Eh 0-3
05h 0 0Fh 0-1
06h 0 10h 0-1
07h 0
Примечания:
1. Содержимое видеостраниц не меняется при переключении их. Вы
можете писать в пассивную страницу, затем переключить их, что
обеспечит вам быструю смену информации на экране.
2. Функция не сохраняет значений регистров AX, SP, BP, SI и DI.
На РCjr эта ф-н имеет иное назначение и состоит из четырёх подфункцый:
Вход: AL = 80h – Читать регистры страниц ЭЛТ и микропроцессора
Вход: AL = 81h – Задать регистр страниц микропроцессора
BL = регистр страниц микропроцессора
Вход: AL = 82h – Задать регистр страниц ЭЛТ
27
BН = регистр страниц ЭЛТ
Вход: AL = 83h – Задать регистр страниц ЭЛТ и микропроцессора
ВL = регистр страниц микропроцессора
BН = регистр страниц ЭЛТ
Функция 06h – скроллинг(прокрутка) в окне вверх (или очистка окна)
Вход: AH = 06h
CH,CL = строка, столбец левого верхнего угла окна (с 0)
DH,DL = строка, столбец правого нижнего угла
AL = число прокручиваемых строк(0 - очистка всего окна)
BH = атрибуты вывода пустых строк
Выхода: нет
Описание:Строки, заполненные пробелом с атрибутами, указанными в BH, вставляются внизу окна, остальные сдвигаются вверх. Строки, вышедшие за пределы окна, пропадают.Прокручивает заданное окно на заданное количество строк вверх. Если AL= 0, то заполняет окно пробелами (очищает его).
Примечания:
1. Функция действует только в активной видеостранице.
2. Функция не сохраняет значений регистров AX, SP, BP, SI и DI.
В графических режимах атрибут задаётся не совсем естественным образом: для CGA каждые два бита байта ВН задают цвет одного из четырёх вертикальных столбцов, поэтому, если вы не хотите получить полосатый экран, цвет заполнения пустых строк должен быть четырёхкратно повторен в байте атрибутов. На EGA и VGA экран заполняется цветом символа (а не фона!) из байта ВН.
Например для заполнения окна голубым цветом (код1) в
текстовом режиме нужно задать ВН = 10h, а в графическом
режиме ВН = 1 для EGA/VGA и ВН = 55h для CGA.
4. Для прокрутки окна вниз используйте ф-н 07h.
Функция 07h – скроллинг (прокрутка) вниз в окне
Вход: AH = 07h
28
CH,CL = верхняя строка, столбец левого верхнего
угла окна (с 0)
DH,DL = нижняя строка, столбец правого нижнего угла
AL = число прокручиваемых строк (0 - очистка всего окна)
BH = атрибут вывода чистых строк
Описание: Прокручивает заданное окно на заданное количество строк вниз. Если AL=0, то заполняет окно пробелами (очищае его). Строки, заполненные пробелом с атрибутами, указанными в BH, вставляются вверху окна, остальные сдвигаются вниз. Строки, вышедшие за пределы окна, пропадают.
Примечание:
1. Функция действует только в активной видеостранице.
2. Функция не сохраняет значений регистров AX, SP, BP, SI и DI.
3. О задании цвета в ВН см. прим. 3 в п. 2.1.8.
Для прокрутки окна вверх используйте ф-н 06h.
Функция 08h - чтение из текущей позиции курсора
Вход: AH = 08h
BH = номер видеостраницы
Выход:AL = ASCII-код символа
AH = атрибут (только для текстовых режимов)
Описание: Для заданной дисплейной страницы сообщает код и
(в текстовых режимах) атрибут символа, находящегося в текущей позиции курсора.
Примечания:
В графическом режиме не надо указывать номер видеостраницы,
функция возвращает в AL 00h, если не опознает изображение символа.
Можно получить символ и атрибут из любой страницы, не
обязательно активной.
Функция не сохраняет значений регистров AX, SP, BP, SI и DI.
Для вывода символа з заданным атрибутом используйте ф-н 09h, для вывода символа без изменеия атрибута- ф-н 0Аh.
29
Функция 09h - Вывод символа/атрибута в текущую позицию курсора
Вход:AH = 09h
BH = номер видеостраницы
AL = ASCII-код символа
CX = счётчик (количество) выводимых символов(не 0!)
BL = атрибуты (текст.режим) или цвет (графика)
Описание: Выводит в заданную страницу дисплея символ AL с атрибутом BL с текущей позиции курсора СX раз. Текуща позиция курсора не изменяется.
Примечания:
Вывод начинается с текущей позиции курсора в указанной
странице, однако сам курсор не перемещается.
В текстовых режимах символы, выводимые за правую границу
экрана, переносятся на следующую строку; в графике этого не
делается.
Эта функция изображает управляющие символы их графическими изображениями, не выполняя их управляющих функций. Например, символ с кодом ASCII = 0Dh будет изображен нотным символом, а возврат каретки вы-
полнен не будет. BL = атрибуты (текст.режим) или цвет (графика)
В некоторых версиях BIOS эта ф-н разрушает регистры AX, SP,
BP, SI, и DI .
В графических режимах CGA задание дисплейной страницы не требуется .
В текстовых режимах BL должен содержать атрибут вывода символа. Если бит 7 в BL устаговлен, то во всех режимах, кроме 13h, цвет символа формируется как сума по модулю (XOR) битов BL с битами цвета экрана. В режимах 13h BL содержит цвет символа (0-255), а ВН – цвет фона. Если заданное количество символов не помещается в текущую строку экрана, то результаты непредсказуемы.
Управляющие символы (т. е. символы с кодами менее 20h) выводятся как обычные: например AL=Odh отобразится на экране как рисунок музыкальной ноты, а не как возврат каретки.
В графических режимах 4 – 6 младшие 128 символов ASCII навлекаются из знакогенератора видеоадаптера, а старшие 128 символов – из пользовательской таблицы, адрес которой должен быть задан в векторе Int 1Fh. В остальных графических режимах все 256 символов ASCII хранатся в ПЗУ знакогенератора.
30
Если Вам нужно вывести символ (ы) без изменения цвета, то используйте ф-н 0Ah.
Примечания:
Вывод начинается с текущей позиции курсора в указанной
странице, однако сам курсор не перемещается.
В текстовых режимах символы, выводимые за правую границу
экрана, переносятся на следующую строку; в графике этого не
делается.
Эта функция изображает управляющие символы их графическими изображениями, не выполняя их управляющих функций. Например, символ с кодом ASCII = 0Dh будет изображен нотным символом, а возврат каретки выполнен не будет.
Если в графических режимах атрибуты в BL даны с
установленным 7 битом, с битами цвета выводимого символа и
битами цвета текущего символа производится операция
ИСКЛЮЧАЮЩЕЕ ИЛИ. Вы можете пользоваться этим для
вывода символов и последующего их уничтожения.
5. Функция не сохраняет значений регистров AX, SP, BP, SI и DI.
Функция 0Ah - Вывод символа в текущую позицию курсора
Вход: AH = 0Ah
BH = номер страницы экрана
AL = ASCII-код символа
CX = счётчик выводимых символов (не нуль!)
Выход: нет
Описание: Выводит а заданную страницу дисплея символ AL с текущей позиции курсора СХ раз. Текущая позиция курсора не изменяется.
Примечания:
Эта ф-н полностью аналогична ф-н 19h с единственным отличием: она выводит символ(ы) с тем атрибутом, который был в позиции курсора.
См. также: Int 10h, ф-н 19h
Вывод начинается с текущей позиции курсора в указанной
31
странице, однако сам курсор не перемещается.
В текстовых режимах символы, выводимые за правую границу
экрана, переносятся на следующую строку; в графике этого не
делается.
Эта функция изображает управляющие символы их графическими изображениями, не выполняя их управляющих функций. Например, символ с кодом ASCII = 0Dh будет изображен нотным символом, а возврат каретки выполнен не будет.
В отличие от функции 09h, позволяющей вам задавать атрибуты
вывода, эта функция использует текущие атрибуты.
Функция 0Bh – Задание цветовой палитры
Вход: AH = 0Bh
BH = номер подф-н (0 или 1)
BL = зависит от подф-н
Выход: нет
Описание: Эта ф-н предназначена для видеорежимов CGA и имеет две подфункции.
Подф-н 0: Задание цвета
BL = новый цвет (0 - 31)
Эта подф-н:
в графических режимах 320 х 200 задаёт цвет фона;
в графическом режиме 640 х 200 (CGA) задаёт цвет символов;
в графических режимах 640 х 200 (EGA/VGA) задаёт цвет фона;
в текстовых режимах задаёт цвет рамки (цвет 16-31 задают фон повышенной яркости).
Подф-н 1: Задание палитры
BL = номер палитры (0 или 1)
Задаёт палитру для графических режимов 320 х 200, т. е. соответствии номеров цветов цветам точек экрана:
Номер цвета
Палитра 0
Палитра 1
0
1
2
3
Текущий цвет фона
Зелёный
Красный
Коричневый
Текущий цвет фона
Бирюзовый
Фиолетовый
Белый
32
Примечание:
В некоторых версиях BIOS эта ф-н разрушает регистры АХ, SP, BP, SI и DI.
На EGA/VGA не рекомендуется использовать эту ф-н, т. к. правиильно задавая цвет фона, она меняет и некоторые цвета экрана. Вместо нее рекомендуется ф-н 10h, подф-н 00h.
См. также: Int 10h, ф-н 10h.
Функция 0Ch – Вывод пикселя на экран.
Вход: AH = 0Ch
BH = номер дисплейной страницы
DX = вертикальная позиция пикселя
CX = горизонтальная позиция пикселя
AL = цвет пикселя (0-15)
Выход: нет
Описание: Выводит в заданную позицию заданной страницы дисплея точку заданного цвета.
Примечания:
В некоторых версиях BIOS эта ф-н разрушает регистры AX, SP, BP, SI и DI.
В графических режимах CGA задание дисплейной страницы не требуется.
Допустимие позиции и диапазон цветов определяются текущим видеорежимом.
Еесли бит 7 в AL установлен, то во всех режимах, кроме 13h, цвет символа формируется как сумма по модулю 2 (XOR) битов AL с битами цвета экрана. Это позволяет выводить изображение и за тем удалять его с использованием «мерцающих битов». Выдеорежим 13h допускает значение AL от 0-255.
Вывод изображений с помощью этой ф-н работает крайне медленно.
Функция 0Dh - чтение пикселя
Вход: AH = 0Dh
BH = номер дисплейной страницы экрана (для режимов,
33
поддерживающих более одной видеостраницы)
DX = вертикальная позиция пикселя
CX = горизонтальная позиция пикселя
Выход: AL = цвет пикселя
Описание: Возвращает цвет точки экрана в заданой позиции дисплейной страници.
Примечания:
В некоторых версиях BIOS эта ф-н разрушает регистры AX, SP,
BP, SI и DI.
В графических режимах CGA заданий дисплейной страницы не требуется.
Допустимые позиции и диапазон цветов определяются текущим видеорежимом.
Чтение изображений с помощью ф-н работает крайне медленно.
См. также: Int 10h, ф-н 0Ch.
Функция 0Eh – Вывод символов в режиме телетайпа
Вход: AH = 0Eh
AL = код символа
BL = цвет символа (только для графических режимов)
BH = номер дисплейной страницы (см. ниже)
Выход: нет
Описание: Выводит в текущую позицию курсора заданный символ и продвигает курсор в следующую позицию экрана (при достижении конца строки курсор перемещается в начало следующей строки, при достижении конца экрана происходит сдвиг экрана на одну строку вверх и нижняя строка заполняется атрибутом последнего символа предыдущей строки).
Примечание:
В некоторых версиях BIOS эта ф-н разрушает регистры AX, SP,
BP, SI и DI.
В текстовых режимах символ выводится с текущим атрибутом данной позиции экрана. В графических режимах цвет символа должен быть задан в BL.
34
В ранних РС (BIOS от 04/24/81 и 10/19/81) в текстовых режимах ВН должен содержать номер активной страницы дисплея.
Эта ф-н специальным образом обрабатывает следующие коды символов:
07h – звуковой сигнал;
08h – возврат курсора на шаг;
0Ah – перевод курсора в следующую строку(ПС);
0Dh – перевод курсора в начало строки (ВК).
Функция 0Fh – чтение текущего состояния дисплея.
Вход: AH = 0Fh
Выход: AL = текущий видеорежим
AH = количество символов в строке экрана
BH = номер активной страницы дисплея
Описание: Возвращает текущие параметры дисплея.
Примечание:
В некоторых версиях BIOS эта ф-н разрушает регистры AX, SP,
BP, SI и DI.
Информация о видео режимах приведена в п. 7. 2.
Для смены видеорежима используйте ф-н 00h, для смены активной страницы – ф-н 05h.
См. также: Int 10h, ф-н 00h
Int 10h, ф-н 05h
Функция 10h – Установка регистров палитр
(PCjr, EGA, VGA, MCGA)
Вход: AH = 10h
AL = номер подф-н:
00H - Задать один регистр палитры
01H - Задать регистр рамки
02H - Задать все регистры палитры
03H - Управление битомерцания
07H - Читать один регистр палитры (VGA)
08H - Читать регистр рамки (VGA)
09H - Читать все регистры палитры (VGA)
10H - Задать один регистр цвета (VGA, MCGA)
12H - Задать блок регистров цветов (VGA, MCGA)
13H - Задать страницы цветов (VGA)
35
15H - Читать один регистр цвета (VGA, MCGA)
17H - Читать блок регистров цветов (VGA, MCGA)
1AH - Читать страницы цветов (VGA)
1BH – Суммирование цветов (VGA, MCGA)
прочие – определяются подф-н
Выход: зависит от подф-н
Описание: Эта ф-н состоит из набора подф-н, управляющих регистрами палитр и цветов EGA ,VGA, MCGA, PCjr. Подф-н 00h – 03h применимы ко всем этим адаптерам, но не должны вызыватся в режиме 13h, т. к. в этом режиме регистр палитр служать индексами для регистров цветов ЦАП (цифро-аналогового преобразования) VGА. Подф-н 07h – 1Вh поддерживаются только адаптером VGA и, с некоторыми оговорками, MCGA.
ЕGA и РСjr имеют 16 регистров палитр и 1 регистр рамки (overscan). VGA имеет, кроме того, 256 регистров цвета ЦАП, каждый из которых содержит три 6-битовых значения, задающих интенсивность зелёного, синего и красного лучей видеосигнала.
На MCGA эти подф-н имеют ряд особенностей, описаных ниже.
Подф-н 00h: задать один регистр палитры
Вход: BL = номер палитры (0 – 15)
ВН = содержимое регистра
Выход: нет
Описание: Изменяет содержимое заданного регистра палитры. Каждый регистр палитры соответствует одному из 16 номеров цветов и имеет следующую структуру:
Бит:
0: Синий 2/3 яркости
1: Зелёный 2/3 яркости
2: Красный 2/3 яркости
3: Синий 1/3 яркости
(подчёркивание для MGA)
4: Зелёный 1/3 яркости
(яркость для MGA)
5: Красный 1/3 яркости
36
Например, ВН = 02h задаст зелёный, ВН = 10h – бледно-зелёный, а ВН = 12h – ярко-зелёный цвет.
По умолчанию регистры палитры содержат значения цветов СGA:
Регистр Значение Цвет
Регистр Значение Цвет