Анализ содержимого 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.