MS-DOS для программиста

Анализ содержимого 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 , используют для работы с дисками специальные драйверы.

    Приведем сокращенную таблицу параметров для стандартных типов НМД (зависит от версии 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
    Для всех приведенных в таблице типов дисков на одной дорожке располагается 17 секторов.

    Стандартный компьютер IBM PC/XT комплектуется обычно НМД с типом 1, тип 2 используется в стандартном компьютере IBM PC/AT. Остальные типы НМД используются главным образом старыми версиями BIOS.


    Содержание раздела