Как мы уже говорили, энергонезависимая память CMOS используется в современных компьютерах для хранения текущей конфигурации аппаратных средств. Эта память состоит из набора ячеек, доступ к которым для чтения и записи выполняется через порты ввода и вывода с адресами 70h и 71h.
Процедура чтения ячейки памяти CMOS состоит из двух шагов. На первом шаге программа записывает в выходной порт с адресом 70h номер ячейки, из которой необходимо прочитать информацию. На втором шаге программа читает содержимое данной ячейки из входного порта с адресом 71h:
int nCellContent;
outp(0x70, nCell);
nCellContent = inp(0x71);
Запись данных в ячейку памяти CMOS выполняется аналогично, только после записи номера ячейки в порт 70h программа должна записать новое значение для этой ячейки в порт с адресом 71h:
outp(0x70, nCell);
outp(0x71, nNewValue);
В памяти CMOS хранится текущее время и дата, сведения о конфигурации системы, результат тестирования при включении питания и другая информация, приведенная ниже:
Адрес ячейки |
Содержимое |
00h - 0Dh |
Используются часами реального времени |
0Eh |
Байт состояния диагностики при включении питания |
0Fh |
Байт состояния отключения |
10h |
Тип НГМД |
11h |
Зарезервировано |
12h |
Тип НМД (если меньше 15) |
13h |
Зарезервировано |
14h |
Конфигурация оборудования |
15h - 16h |
Объем основной памяти |
17h - 18h |
Объем расширенной памяти |
19h |
Тип первого НМД (если он больше 15) |
1Ah |
Тип второго НМД (если он больше 15) |
1Bh - 20h |
Зарезервировано |
21h - 2Dh |
Зарезервировано |
2Eh - 2Fh |
Контрольная сумма ячеек 10h - 20h |
30h - 31h |
Объем расширенной памяти |
32h |
Текущее столетие в двоично-десятичном коде (19h для 19-го столетия) |
33h |
Различная информация |
34h - 3Fh |
Зарезервировано |
Рассмотрим подробно назначение отдельных ячеек CMOS-памяти.