Конфигурация системы и типы составляющих ее устройств
В развитие идеи, изложенной выше, рассмотрим способ, при котором КЧЗП в качестве параметра использует всю конфигурацию системы. Конечно надо учитывать, что этот способ будет давать ошибки и отказывать в выполнении законной копии программы, если какие либо составляющие вычислительной системы будут изменены (например, отключен принтер), либо наоборот законная и незаконная копии программы будут работать на системах с одинаковой конфигурацией.
Рассмотрим способы определения параметров системы, которые используются затем в КЧЗП.
Для IBM AT параметры системы хранятся в так называемой CMOS памяти. Она имеет 64 однобайтовых регистра, пронумерованных от 00 до 3Fh. Назначения некоторых регистров представлены в табл. 1.
Таблица 1 Назначение некоторых регистров CMOS памяти | ||||||||||||||||||||||||||||||||||
|
Регистр 10h содержит информацию о НГМД: его биты 7-4 описывают накопитель A, а биты 3-0 - накопитель B. Аналогично сведения о НЖМД помещаются в регистр 12h.
Информация о периферии хранится в байте 14h CMOS памяти. Для ее получения надо сначала записать номер регистра (в данном случае 14h) в порт с адресом 70h, а затем прочитать содержимое регистра через порт 71h. (Для записи какого-то значения в регистр CMOS памяти надо занести адрес регистра в порт с адресом 70h, а значение - в порт 71h.). Значения битов регистра 14h представлены в табл. 2.
Таблица 2 Назначение битов 14h-го регистра CMOS памяти | |||||||||||||||||
|
Компьютер может быть снабжен различными типами дисководов для гибких дисков и винчестеров. Рассмотрим с помощью каких средств можно получить информацию об их характеристиках кроме доступа к CMOS памяти.
Прерывание 21h DOS компьютера AT имеет функции 32h и 36h, связанные с определением характеристик установленных накопителей. Функция 36h сообщает текущие сведения о доступном пространстве на диске, номер которого загружается в регистр DL. Она возвращает:
- число секторов на один кластер в регистре AX;
- число незанятых кластеров - в BX;
- число байтов в одном секторе - в CX;
- число кластеров на диске - в DX.
Теперь легко узнать, каков объем диска, номер которого помещался в регистр DL. Для этого достаточно вычислить произведение значений регистров AX,CX,DX.
Функция 32h, позволяет получить таблицу с параметрами накопителя, номер которого загружен в регистр DL. Ее адрес будет содержаться в регистрах DX:BX. Подробное описание байтов этой таблицы можно найти в любом справочнике по прерываниям.
Состав установленного оборудования проверяется при загрузке, и результат проверки помещается в регистр статуса. Этот регистр занимает два байта, начиная с адреса 0040:0010, и в табл. 3 представлены значения его битов.
Для доступа к этому регистру кроме прямого обращения по адресу можно воспользоваться прерыванием 11h BIOS, которое возвращает два байта его значений в регистре AX.
В языке Turbo C имеется специальная функция BIOSEQUIP из библиотеки стандартных функций <bios.h>, которая возвращает целое число, описывающее оборудование, входящее в систему. Возвращаемое значение интерпретируется набором битовых полей, как представлено в табл. 4.
Таблица 3 Регистр состава установленного оборудования | |||||||||||||||||||||||||||||||||
|
Еще одно прерывание BIOS - 15h через функцию C0h позволяет получить адрес в ПЗУ, определяемый регистрами ЕS:BX, по которому находится табл. 4.
Таблица 4
|
Для определения типа дисплея надо проверить бит номер 1 байта, находящегося по адресу 0040:0087. Когда этот бит равен 1 - подсоединяется монохромный дисплей, а когда он равен 0 - цветной.