Анализ содержимого CMOS-памяти

Анализ содержимого CMOS-памяти. Программа не может непосредственно адресовать CMOS-память, как обычную оперативную память. Для работы с CMOS-памятью необходимо использовать порты ввода/вывода с адресами 70h и 71h, причем процедура записи или чтения состоит из двух шагов. На первом шаге операции чтения или записи программа должна записать в порт 70h номер нужной ячейки CMOS-памяти (0 3Fh). На втором шаге программа должна обратиться к порту 71h для выполнения записи в указанную ячейку памяти или чтения из нее. Приведем фрагмент программы, составленной на языке ассемблера, который считывает байт из CMOS-памяти с адресом 12h: mov al,12h out 70h, al ; задаем адрес в CMOS-памяти jmp $+2 ; небольшая задержка in al,71h ; записываем в AL считанное значение Запись в CMOS-память выполняется аналогично.

При анализе конфигурации дисковой системы для нас представляют наибольший интерес ячейки CMOS-памяти со следующими адресами: • 14h - байт конфигурации Биты 7, 6 этого байта имеют такое же значение, что и в младшем байте слова конфигурации, возвращаемого прерыванием INT 11h - они содержат информацию о количестве установленных в компьютере НГМД. Значение бита 0, равное нулю, говорит о том, что в системе нет ни одного НГМД. • 10h - тип НГМД Младшая и старшая тетрады этого байта описывают, соответственно, второй и первый НГМД: Значение Емкость, Кбайт Диаметр Количество секторов на одну дорожку Количество дорожек 0000 НГМД не установлен - - - 0001 360 5,25" 9 40 0010 1200 5,25" 15 80 0011 720 3,5" 9 40 0100 1440 3,5" 18 80 • 12h - тип НМД C: и D: Этот байт разделен на две тетрады аналогично байту, который описывает НГМД. Однако в тетраде можно закодировать только 16 значений, а различных типов НМД значительно больше.

Поэтому тип 15 используется специальным образом - если тип НМД в младшей тетраде (диск C:) равен 15, то правильное значение типа находится в CMOS-памяти по адресу 19h. Аналогично для диска D: этот тип можно взять из байта по адресу 1Ah (если содержимое старшей тетрады байта с адресом 12h равно 15). Если в вашем компьютере установлен НМД с интерфейсом ESDI , SCSI или другим специализированным интерфейсом, то, как правило, для работы с ними используется специальная "дисковая" базовая система ввода/вывода.

Соответствующая микросхема ПЗУ может быть расположена непосредственно в контроллере.

При этом в CMOS-памяти в ячейке 12h для типа диска может быть указано нулевое значение, несмотря на то, что диск установлен.

Прерывание INT 11h, тем не менее, скажет вам, что в системе имеется НМД. Если используется "дисковая" базовая система ввода/вывода, то она сама инициализирует таблицу параметров диска (будет описана позже) и выполняет обработку прерывания INT 13h. Так как MS-DOS при обращении к дискам использует именно это прерывание, то не возникает никаких проблем, связанных с отсутствием типа диска в CMOS-памяти.

Другие операционные системы, такие как Windows NT и OS/2 , используют для работы с дисками специальные драйверы. 3.4