На главную Назад
Добро пожаловать, уважаемый посетитель!
>

Программа дисплея BIOS имеет много функций, все они перечислены на

Фиг.9.6.В связи с тем, что видеопрограмма имеет так много

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

таблица названа M1 и содержит смещения каждой точки входа программы

дисплея BIOS.Первая часть программы VIDEO_IO извлекает код из

регистра AH и преобразует его в адрес перехода.Первая часть

программы выполняет еще и некоторые другие действия, включая

проверку поля EQUIP_FLAG.

 

Фирма IBM написала видеопрограмму BIOS так, чтобы она могла

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

так и с монохромным. Но BIOS также подразумевает, что из них

активен только один. Это означает, что вы не сможете использовать

BIOS для того, чтобы записать символ в цветной дисплей, а затем

сразу использовать BIOS для записи символа в монохромный дисплей.

Видеопрограмма BIOS может иметь дело только с одним дисплейным

адаптером.

 

AH Функция

-------------------------------------------------

0Инициализация адаптера дисплея

1Установка размера и формы курсора

2Установка позиции курсора

3Чтение позиции курсора

4Чтение позиции светового пера

5Назначение текущей страницы

6Сдвиг вверх

7Сдвиг вниз

8Чтение символа

9Запись символа и атрибута

10Запись одного символа

11Выбор палитры

12Запись точки

13Чтение точки

14Запись на телетайп

-------------------------------------------------

 

Фиг. 9.4 Функции BIOS для видеомонитора

 

Всякий раз, когда программа вызывает видеопрограмму BIOS, она

определяет, какой дисплейный адаптер имеется в системе с помощью

проверки битов поля EQUIP_FLAG, которые соответствуют текущему

дисплею. Если биты 5 и 4 оба равны 1, то в системе присутствует

монохромный адаптер. Любая другая установка бит говорит о том, что

в системе работает цветной адаптер. Фирма IBM написала эту

программу таким способом, исходя из того, что система может иметь

только один дисплейный адаптер. Перед первым включением машины вы

должны установить переключатели на системной плате в положение,

показывающее, какой адаптер дисплея используется.

 

Информация флагов оборудования в поле EQUIP_FLAG определяет,

какой из адресов буфера будет использовать видеопрограмма BIOS. Для

монохромной платы BIOS загружает в регистр ES значение 0B000H, а

для цветной платы - значение 0B800H. Это позволяет остальным

программам дисплея BIOS работать без использования информации о

том, какой адаптер работает в системе. Все ссылки к буферу делаются

относительно регистра ES.

Вы можете решить, что, поскольку поле EQUIP_FLAG показывает,

какой адаптер используется, можно переключаться от одного адаптера

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

так, Адрес ввода-вывода контроллера 6845 отличается для двух

адаптеров, и BIOS записывает этот базовый адрес в свою область

данных. Видеопрограмма BIOS заносит в переменную ADDR_6845 этот

адрес только при инициализации адаптера (команда AH = 0). Поэтому

переключение от одного дисплея к другому также требует

корректировки этой переменной.

 

Даже если переменная CURSOR_POSN содержит восемь позиций, она

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

сбрасывать положение курсора в области данных BIOS всякий раз при

переключении с одного адаптера на другой. Если вы не сделаете

этого, изображение курсора не будет соответствовать его положению,

записанному в области данных, и символ на экране будет записываться

в неверную позицию.

 

Фирма IBM опубликовала методы смены одного дисплея другим, как

с помощью программы на языке ассемблера, так и с помощью программы

на Бейсике. В этих методах требуется для указания адаптера, который

вы хотите использовать, изменить переменную EQUIP_FLAG, а затем

использовать видеопрерывание INT 10H при AH = 0. Эта функция

инициализирует адаптер и обеспечивает правильную установку всех

полей данных программы BIOS. После этого BIOS может работать с тем

дисплейным адаптером, который указан. При этом картинка на другом

дисплее остается видимой. Кроме того, дисплейный буфер того

адаптера продолжает отображать любые изменения текста и графики,

занесенной в него. Так что вы можете измекнять содержимое

дисплейного буфера с помощью вашей программы (а не с помощью BIOS),

чтобы скорректировать информацию, находящуюся на экране, с которого

вы только что переключились.

 

Давайте рассмотрим простой пример. Вы имеете IBM PC с двумя

адаптерами - цветным графическим и монохромным, и к каждому

адаптеру подключен дисплей. Когда вы сначала включаете машину,

система использует монохромный дисплей. Именно с учетом этого вы и

должны установить переключатели на системной плате, так как

монохромный дисплей может быть поврежден, если не будет

инициализирован сразу же после включения питания. Инструкция по

работе рекомендует, чтобы вы установили переключатели в положение,

показывающее, что в системе присутствует монохромный адаптер.

 

После этого вы можете использовать видеопрограмму BIOS с

монохромным дисплеем. Чтобы перейти на цветной адаптер, можно

выполнить программу на Фиг.П9.7. Эта программа включает цветной

адаптер в 80-символьном текстовом режиме. Символы, которые были

высвечены на монохромном дисплее, на нем и остаются, а вы теперь

можете использовать видеопрограмму BIOS для работы с цветным

графическим дисплеем. Но если вам потребуется изменить содержимое

монохромного дисплея, вы сможете сделать это, записав новые символы

или атрибуты в буфер дисплея по адресу 0B000H. Это не изменит

положения курсора, но изменит картинку. В этом случае если вы

хотите изменять текст одновременно на цветном и монохромном

дисплеях, вы должны написать собственную программу обслуживания

монохромного дисплея. Или вы можете выяснить, какие значения надо

изменить в поле данных BIOS, чтобы курсор перешел назад, и

выполнить нужные действия, не инициализируя адаптер каждый раз.

 

Microsoft (R) Macro Assembler Version 5.001/1/80 04:06:26

Фиг. 9.7 Переключение на цветной дисплейPage1-1

 

 

PAGE ,132

TITLE Фиг. 9.7 Переключение на цветной дисплей

0000 STACK SEGMENT STACK

00000040[ DW 64 DUP (?)

????

]

 

0080 STACK ENDS

0000 ABS0 SEGMENT AT 0

0410 ORG 410H

0410 EQUIP_FLAG LABEL BYTE ; Будет изменяться только младший

0410 ABS0 ENDS ;байт поля флагов

 

 

0000 CODE SEGMENT

ASSUMECS:CODE,DS:ABS0

COLOR PROC FAR

00001E PUSH DS ; Адрес возврата в ДОС

00012B C0 SUB AX, AX

000350 PUSH AX

 

00048E D8 MOV DS, AX ; Загрузка адреса сегмента ABS0 в регистр DS

000680 26 0410 R CF AND EQUIP_FLAG, 11001111b ; Указание на цветной дисплей как

000B80 0E 0410 R 20 OR EQUIP_FLAG, 00100000b ;на основной (режим 80*25)

0010B8 0003 MOV AX, 3

0013CD 10 INT 10H ; Сброс дисплея

0015C3 RET ; Возврат в ДОС

COLOR ENDP

0016 CODE ENDS

END

 

Фиг. 9.7 Переключение на цветной дисплей


 

Mail.ru