logo
1 / Lectures / Lect5_pc

Кмоп память и часы реального времени (cmos Memory и rtc – Real Time Clock)([5], с.89)

В первых ПЭВМ (PC XT) конфигурация оборудования (объем памяти, количество дисководов и пр.) задавалась переключателями, состояние которых опрашивалось во время выполнения POST (Power On Self Test). В ПЭВМ, начиная сAT, для хранения подобной информации, состав которой расширился, ввели специальную микросхему КМОП памяти небольшого объема, питание которой осуществляется от батарейки. В эту же микросхему поместили и часы-календарь, также питающиеся от той же батарейки. Эта память и часы –CMOS Memory и Real Time Clock (RTC)– стали стандартным элементом архитектурыIBM совместимых ПЭВМ.

Содержимое этой памяти и дату сначала модифицировали с помощью внешней загружаемой утилиты SETUP, а позже эту утилиту встроили вBIOS. МикросхемыCMOS RTCимеют встроенную систему контроля питания, отслеживающую и разряд батареи ниже допустимого уровня. Достоверность информации конфигурирования проверяется с помощью контрольной суммы.

Доступ к ячейкам CMOS RTCосуществляется через порты ввода-вывода070h – адрес (индекс) ячейки в пределахCMOSи 071h– данные. Поскольку эта память имеет низкое быстродействие (порядка единиц микросекунд), между командами записи адреса (в порт 070h)и чтения-записи данных необходима программная задержка.

Назначение ячеек CMOS RTCприведено в табл.8. (Запоминать таблицу нет необходимости, но при ответе на билет желательно помнить основные ее разделы –ВВС).

Можно отметить, что первоначально под изображение года в дате отводился только байт 09 (в нем можно было записать только две младшие цифры года), а старшие всегда считались 19. Позже (уже в 386 и 486 машинах) добавили еще один байт для века (32hили37h). Однако, в раде моделей он автоматически не инкрементируется таймером. Кроме того не во всехBIOSбыл правильный календарь наXXIвек. (Все это было связано с известной“проблемой 2000 года”Y2K).

Таблица 8. Стандартное назначение ячеек CMOS RTC

Адрес

Назначение

00h – 09h,

32h (37 в PS/2)

Ячейки RTC в двоично-десятичной кодировке

00 – секунды

01 – секунды будильника

02 – минуты

03 – минуты будильника

04 – часы

05 – часы будильника

06 – день недели

07 – день месяца

08 – месяц

09 – год (2 младшие цифры)

32h– век (2 старшие цифры года, вPS/2 –этот адрес37h)

0Ah

Регистр A состояния RTC

Бит 7 – 1 = обновление времени, 0 = готов к чтению

Биты [6:4] – делитель частоты (для кварца 32,768 КГц – 010)

Биты [3:0]= 0110 – выходная частота 1024 Гц

0Bh

Регистр B состояния RTC

Бит 7 – 1 = остановка часов, 0 = нормальный ход

Бит 6 – 1 = разрешение периодических прерываний, 0 = запрет

Бит 5 – 1 = разрешение прерываний от будильника, 0 = запрет

Бит 4 – 1 = разрешение прерываний по окончании смены времени, 0 = запрет

Бит 3 – 1 = разрешение выходной частоты (см. регистр 0Ah), 0 = запрет

Бит 2 – 1 = двоичный формат, 0 - двоично-десятичный формат

Бит 1 – 1 = 24-часовой режим, 0 – 12-часовой режим

Бит 0 – 1 = разрешено переключение летнее/зимнее время, 0 = запрет

0Ch

Регистр C состояния RTC – чтение флагов идентификаторов прерывания

Бит 7 – IRQF – общий запрос прерывания

Бит 6 – PF– периодические прерывания

Бит 5 – AF – прерывание от будильника

Бит 4 – UF – прерывание по смене времени

Биты [3:0]– зарезервированы

0Dh

Регистр D состояния RTC

Бит 7 – 1 = питание нормальное, 0 = разряд батареи

Биты [6:0]– зарезервированы

0Eh

Байт состояния диагностики POST

Бит 7 – 1 = Power Lost – терялось питаниеCMOS

Бит 6 – 1 = Checksum Bad – ошибка контрольной суммыCMOS

Бит 5 – 1 = Bad Configuration – ошибка конфигурации

Бит 4 – 1 = RAM Size Error – несоответствие размера ОЗУ, определенного тестом, записи вCMOS

Бит 3 – 1 = HDD Error– ошибка инициализации жесткого диска

Бит 2 – 1 = Time Valid – нет ошибки календаря (30 февраля, 25 часов)

Биты [1:0] – зарезервированы

0Fh

Shutdown Code (код закрытия системы)– используетсяPOSTдля определения вида предшествующего закрытия системы

00 = аппаратный или программный сброс

01 = размер памяти определен

02 = тест памяти прошел

03 = тест памяти выявил ошибку

04 = POST завершен, идет загрузка системы

05 = JMP FAR [0:0467h] с инициализацией контроллера прерываний

06 = тест защищенного режима прошел

07 = тест защищенного режима выявил ошибку

08 = ошибка при определении размера памяти

09 = перемещен блок Extended Memory (INT 15h)

0A = JMP FAR [0:0467h] без инициализации контроллера прерываний

0B =используется 80386

10h

Типы НГМД

Биты [7:4]– дисководA

Биты [3:0]– дисководB

0 = нет, 1 = 360 Кбайт, 2 = 1,2 Мбайт, 3 = 720 Кбайт, 4 = 1,44 Мбайт

11h

Зарезервирован

12h

Типы НЖМД

Биты [7:4]– привод0

Биты [3:0]– привод1

0 = нет, 1 – Eh = типы 1 – 14,Fh= тип в байте 19h(для второго привода – в 1Ah)

13h

Зарезервирован

14h

Установленное оборудование

Биты [7:6]– количество НГМД:00 = 1, 01 = 2

Биты [5:4]– тип первичного видеоадаптера

00 – EGA илиVGA

01 – CGA, 40 столбцов

10 – CGA,80 столбцов

11 – MDA,80 столбцов

Биты [3:2]– зарезервированы

Бит 1 – 1 = есть математический сопроцессор

Бит 0 – 1 = есть НГМД

15h – 16h

Размер базовой памяти (15h –младшие разряды, 16h– старшие), КБ

0280h = 640 КБ

17h – 18h

Размер расширенной памяти (младшие/старшие), КБ

19h, 1Ah

Расширенный тип дискаC, D(вPS/2зарезервированы)

1Bh – 2Dh

Зарезервированы

2Eh – 2Fh

Контрольная сумма CMOSс 10h по20h (младшие/старшие)

30h – 31h

Реальный размер расширенной памяти(младшие/старшие), КБ

32h – 33h

В PS/2контрольнаяCRC-суммаCMOS с10h по 31h (младшие/старшие)

33h

Флаги POST

Бит 7 – 1 = наличие 128 Кбайт ОЗУ под границей 1 Мбайт (доступна теневая

память)

Бит 6 – 1 = первая загрузка после выполнения SETUP

34h – 3Fh

Зарезервированы (можно писать свою информацию для привязки ПО к машине)

38h – 3Fh

В PS/2пароль, доступ по несуществующим адресам78h – 7Fh

Свободные ячейки CMOS RTCиногда используют для привязки ПО к конкретной ПЭВМ (системной плате). Эта привязка выполняется в процессе инсталляции ПО и, если не сохранить образCMOS на диска, то при разрушении информации вCMOS(например, при разряде батарейки), пользователь потеряет право на использование ПО. По этой причине такой способ привязки нельзя считать корректным, поскольку изготовитель ПО на себя ответственность за батарейку не берет.