"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора

Большая часть информация расшифровывается примитивно. Но обра-
тите внимание, что информация о дисковых накопителях распределена
между битами 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