Глава 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 Ревизия количества памяти.-~>