Анализ содержимого 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-памяти со следующими адресами:
Биты 7, 6 этого байта имеют такое же значение, что и в младшем байте слова конфигурации, возвращаемого прерыванием INT 11h - они содержат информацию о количестве установленных в компьютере НГМД.
Значение бита 0, равное нулю, говорит о том, что в системе нет ни одного НГМД.
Младшая и старшая тетрады этого байта описывают, соответственно, второй и первый НГМД:
| Значение | Емкость, Кбайт | Диаметр | Количество секторов на одну дорожку | Количество дорожек |
| 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 |
Этот байт разделен на две тетрады аналогично байту, который описывает НГМД. Однако в тетраде можно закодировать только 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 , используют для работы с дисками специальные драйверы.
Приведем сокращенную таблицу параметров для стандартных типов НМД (зависит от версии BIOS):
| Тип | Количество цилиндров | Количество головок | Емкость диска в байтах |
| 1 | 306 | 4 | 10.653.696 |
| 2 | 615 | 4 | 21.411.840 |
| 3 | 615 | 6 | 32.117.760 |
| 4 | 940 | 8 | 65.454.080 |
| 5 | 940 | 6 | 49.090.560 |
| 6 | 615 | 4 | 21.411.840 |
| 7 | 462 | 8 | 32.169.984 |
| 8 | 733 | 5 | 31.900.160 |
| 9 | 900 | 15 | 117.504.000 |
| 10 | 820 | 3 | 21.411.840 |
| 11 | 855 | 5 | 37.209.600 |
| 12 | 855 | 7 | 52.093.440 |
| 13 | 306 | 8 | 21.307.392 |
| 14 | 733 | 7 | 44.660.224 |
| 15 | 0 | 0 | 0 |
| 16 | 612 | 4 | 21.307.392 |
| 17 | 977 | 5 | 42.519.040 |
| 18 | 977 | 7 | 59.526.656 |
| 19 | 1024 | 7 | 62.390.272 |
| 20 | 733 | 5 | 31.900.160 |
| 21 | 733 | 7 | 44.660.224 |
| 22 | 733 | 5 | 31.900.160 |
| 23 | 306 | 4 | 10.653.696 |
| 24 | 977 | 5 | 42.519.040 |
| 25 | 1024 | 9 | 80.216.064 |
| 26 | 1224 | 7 | 74.575.872 |
| 27 | 1224 | 11 | 117.190.656 |
| 28 | 1224 | 15 | 159.805.440 |
| 29 | 1024 | 8 | 71.303.168 |
| 30 | 1024 | 11 | 98.041.856 |
| 31 | 918 | 11 | 87.892.992 |
| 32 | 925 | 9 | 72.460.800 |
| 33 | 1024 | 10 | 89.128.960 |
| 34 | 1024 | 12 | 106.954.752 |
| 35 | 1024 | 13 | 115.867.648 |
| 36 | 1024 | 14 | 124.780.544 |
| 37 | 1024 | 2 | 17.825.792 |
| 38 | 1024 | 16 | 142.606.336 |
| 39 | 918 | 15 | 119.854.080 |
| 40 | 820 | 6 | 42.823.680 |
Стандартный компьютер IBM PC/XT комплектуется обычно НМД с типом 1, тип 2 используется в стандартном компьютере IBM PC/AT. Остальные типы НМД используются главным образом старыми версиями BIOS.