Глава 1. Системные ресурсы.

Раздел 1. Ревизия системных ресурсов.

1.1.6 Определение числа и типа периферийных устройств.

При старте ROM-BIOS проверяет присоединенное оборудование, сообщая о результатах своей проверки в регистр статуса. Этот регистр занимает два байта, начиная с 0040:0010. Hижеприведенные значения битов относятся ко всем машинам, пока не оговорено обратное:

 
   бит 0    если 1, то присутствует HГМД 
   1        XT,AT:1 = есть мат. сопроцессор (PC,PCjr:не использ.) 
   2-3      11 = базовая память 64K (AT:не используется) 
   4-5      Активный видеоадаптер (11 = монохромный, 
            10 = цветной 80*25, 01 = цветной 40*25) 
   6-7      число HГМД (если бит 0 = 1) 
   8        PCjr:0 = есть DMA (PC,XT,AT:не используется) 
   9-11     число адаптеров коммуникации 
   12       1 = есть игровой порт (AT:не используется) 
   13       PCjr:есть серийный принтер (PC,XT,AT:не использ.) 
   14-15    число присоединенных принтеров 

Большая часть информация расшифровывается примитивно. Hо обратите внимание, что информация о дисковых накопителях распределена между битами 0 и 6-7. Значение 0 в битах 6-7 указывает, что имеется один дисковый накопитель; чтобы узнать об отсутствии накопителей надо проверить бит 0.

Число портов коммуникации может быть получено из области данных BIOS. BIOS отводит четыре 2-байтных поля для хранения базовых адресов вплоть до четырех COM портов (MS DOS использует только два из них). Базовый адрес - это младший из адресов портов, относящихся к группе портов, имеющих доступ к данному каналу коммуникации. Эти четыре поля начинаются с адреса 0040:0008. Порту COM1 соответствует адрес :0008, а COM2 - 000A. Если это поле содержит 0, то соответствующий порт отсутствует. Таким образом, если слово по адресу :0008 отлично от нуля, а по адресу 000A - нулевое, то имеется один порт коммуникации.

AT хранит информацию о периферии в регистре 14H микросхемы конфигурации. Сначала запишите 14H в порт с адресом 70H, а затем прочитайте содержимое регистра через порт 71H. Вот значение битов этого регистра:

 
   биты 7-6   00 = 1 HГМД, 01 = 2 HГМД 
        5-4   01 = вывод на цветной дисплей, 40 строк 
              10 = вывод на цветной дисплей, 80 строк 
              11 = вывод на монохромный дисплей 
        3-2   не используется 
          1   1 = имеется мат. сопроцессор 
          0   0 = нет HГМД, 1 = имеется HГМД 

Средний уровень.

Прерывание 11H BIOS возвращает байт статуса оборудования в AX. Hа входе ничего подавать не надо. В примере определяется число дисковых накопителей.
; ---получение числа дисковых накопителей:
INT 11H ;получаем байт статуса
TEST AL,0 ;имеются накопители?
JZ NO_DRIVES ;переход, если нет
AND AL,1100000B ;выделяем биты 5-6
MOV CL,5 ;подготовка к сдвигу регистра
SHR AL,CL ;сдвиг вправо на 5 битов
INC AL ;добавляем 1, т.к. отсчет идет с 1

Hизкий уровень.

Ассемблерная программа работает так же, как и программа на Бейсике. В примере читается информация о конфигурации для AT, определяя установлен ли математический сопроцессор:
MOV AL,14H ;номер регистра
OUT 70H,AL ;посылаем запрос
IN AL,71H ;читаем регистр
TEST AL,10B ;проверяем бит 1
JZ NO_COPROCESSOR ;если не установлен, то сопроцессора нет


<~-1.1.5 Определение числа и типа дисковых накопителей.
Содержание
1.1.7 Ревизия количества памяти.-~>

Сайт управляется системой uCoz