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

Error message

Notice: Undefined index: add term path in hansel_get_breadcrumbs() (line 524 of /data/sites/msdosworld.ru/www/sites/all/modules/hansel/hansel.module).

 

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

   Большая часть информация расшифровывается примитивно. Но обра-
тите внимание, что информация о дисковых накопителях распределена
между битами 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 НГМД, 01 = 2 НГМД
        5-4   01 = вывод на цветной дисплей, 40 строк
              10 = вывод на цветной дисплей, 80 строк
              11 = вывод на монохромный дисплей
        3-2   не используется
          1   1 = имеется мат. сопроцессор
          0   0 = нет НГМД, 1 = имеется НГМД

   Высокий уровень.

   В Бейсике  нужно  просто  прочитать  байты  статуса из области
данных BIOS. В приложении Б объяснено выполнение битовых операций
в Бейсике. В приведенном примере  проверка наличия дисковых нако-
пителей достигается проверкой четности  младшего байта статусного
регистра (четный - нет накопителей).


100 DEF SEG = 0          'указывыаем на дно памяти
110 X = PEEK(&H410)      'получаем младший байт регистра
120 IF X MOD 2 = 0 THEN 140 'он четный - нет накопителей
130 PRINT "Имеется диск" 'иначе имеется накопитель
140 GOTO 160             'идем ко второму сообщению
150 PRINT "Нет накопителей"  'второе сообщение
160 ...                  'продолжаем...

   Проверка наличия COM1:

100 DEF SEG = 40H        'указываем на область данных BIOS
110 PORT = PEEK(0) + 256*PEEK(1) 'получаем слово со смещением 0
120 IF PORT = 0 THEN...  '... то нет адаптера COM1

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

   Прерывание 11H BIOS возвращает байт статуса оборудования в AX.
На  входе ничего подавать не надо.  В примере определяется  число
дисковых накопителей.

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

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

   Ассемблерная  программа  работает  так  же, как и программа на
Бейсике.   В примере читается информация о конфигурации  для  AT,
определяя установлен ли математический сопроцессор:

   MOV   AL,14H      ;номер регистра
   OUT   70H,AL      ;посылаем запрос
   IN    AL,71H      ;читаем регистр
   TEST  AL,10B      ;проверяем бит 1
   JZ    NO_COPROCESSOR ;если не установлен, то сопроцессора нет


 

Вы находитесь в разделе: 

Добавить коментарий