Глава 1. Системные ресурсы.
Раздел 1. Ревизия системных ресурсов.
1.1.4 Определение числа и типов адаптеров дисплея.
Программе может оказаться необходима информация о том, будет ли она работать в системе с монохромным адаптером, с цветной графической картой или с EGA, а также о наличии второго адаптера. В пункте {4.1.6} объяснено как передать управление от одного адаптера к другому. Байт статуса оборудования, хранящийся в области данных ROM-BIOS по адресу 0040:0010 сообщает установку переключателя 1, который показывает какая из карт активна. В принципе должны иметь значение 11 для монохромной карты, 10 - для цветной карты 80*25, 01 - для цветной карты 40*25 и 00 для EGA. Однако при наличии EGA он может установить биты отличными от 00, в зависимости от установки его собственных переключателей. Поэтому Вы должны сначала другими средствами установить наличие EGA, а затем, если его нет, то по данным BIOS определить является ли активным цветной или монохромный адаптер. Для проверки наличия EGA надо прочитать байт по адресу 0040:0087. Если он равен 0, то EGA отсутствует. Если этот байт ненулевой, то когда бит 3=0, EGA является активным адаптером, а когда он равен 1, то активен второй адаптер.
Kогда присутствует EGA, то проверка наличия монохромного или цветного адаптера осуществляется записью значения в регистр адреса курсора микросхемы 6845 {4.1.1} и последующего чтения значения и проверки их на совпадение. Для монохромной карты пошлите 0FH в порт 3B4H, чтобы указать на регистр курсора, а затем прочитать и записать адрес курсора через порт 3B5H. Соответствующие порты для цветной карты 3D4H и 3D5H. Kогда карта отсутствует, то порт возвращает значение 0FFH; но поскольку это значение может содержаться в регистре, то недостаточно простой проверки на это значение.
Имеются два добавочных вопроса, на которые могут потребоваться ответы при наличии EGA: сколько имеется памяти на его карте и какой тип монитора подсоединен? Для определения типа дисплея проверьте бит 1 по адресу 0040:0087; когда он установлен, то подсоединен ммонохромный дисплей, а когда он равен нулю - цветной. Если Ваша программа использует цветной графический режим с 350 строками, то надо также определить присоединен ли дисплей IRGB или R'G'B'RGB, где последняя аббревиатура соответствует улучшеному цветному дисплею IBM. Это определяется установкой четырех переключателей на карте EGA. Установка этих переключателей возвращается в CL при обращении к функции 12H прерывания 10H. Цепочка четырех младших битов должна быть 0110 для улучшенного цветного дисплея. Та же самая функция сообщает и наличие памяти на карте EGA. Она возвращает BL, содержащий 0 для 64K, 1 - для 128, 2 - для 192 и 3 - для полных 256K памяти дисплея.
Hизкий уровень.
;--- Определение активного адаптера: | |
MOV AX,40H | ;указываем ES на область данных BIOS |
MOV ES,AX | ; |
MOV AL,ES:[87H] | ;проверяем наличие EGA |
CMP AL,0 | ; |
JE NO_EGA | ;если 0040:0087 = 0, то EGA нет |
TEST AL,00001000B | ;EGA есть, проверяем бит 3 |
JNZ EGA_NOT_ACTIVE | ;если бит 3=1, то EGA неактивен |
. | |
. | |
EGA_NOT_ACTIVE: | |
MOV AL,ES:[10H] | ;проверяем байт статуса дисплея |
AND AL,00110000B | ;выделяем биты 4 и 5 |
CMP AL,48 | ;это монохромная карта? |
JE MONOCHROME | ;переход если да |
Предполагая наличие монохромной карты проверим установлена ли цветная карта (неактивная):
;--- Установлена ли неактивная цветная карта? | |
MOV DX,3D4H | ;указываем на регистр адреса 6845 |
MOV AL,0FH | ;запрашиваем регистр курсора |
OUT DX,AL | ;указываем на регистр |
INC DX | ;указываем на регистр данных |
IN AL,DX | ;получаем текущее значение |
XCNG AH,AL | ;сохраняем значение |
MOV AL,100 | ;тестовое значение 100 |
OUT DX,AL | ;посылаем его |
IN AL,DX | ;считываем его снова |
CMP AL,100 | ;сравниваем значения |
JNE NO_CARD | ;переход если нет карты |
XCNG AH,AL | ;иначе есть цветная карта |
OUT DX,AL | ;тогда восстанавливаем значение |
<~-1.1.3 Определение версии MS DOS.
Содержание
1.1.5 Определение числа и типа дисковых накопителей.-~>