В состав IBM PC AT входят часы реального времени Real Time Clock (RTC) и 64 байта неразрушающейся оперативной КМОП памяти (CMOS), питающиеся от автономного источника питания. При включении ПЭВМ содержимое CMOS анализируется POST, который извлекает из нее конфигурацию системы и текущие дату и время. Часы реального времени RTC и CMOS память выполнены на базе микросхемы МС146818 фирмы Motorola, упрощенная структурная схема которой представлена на рис. 1.
Назначение сигналов следующее:
-CE - разрешение кристалла (выход дешифратора адреса);
DS - строб данных;
AS - адресный строб;
R/W - чтение/запись;
SQW - выходные прямоугольные импульсы – меандр (в IBM PC AT не используются);
IRQ - запрос на прерывание от RTC;
PS - сигнал состояния питания (используется для контроля достоверности данных);
CKOUT - синхросигнал, который может использоваться как входной синхросигнал микропроцессора.
Основная часть RTC - задающий генератор (внутренний или внешний) с частотой 4.194304 МГц, 1.048576 МГц и делитель частоты, у которого выход последнего каскада (1 Гц) управляет часами.
Для доступа к данным CMOS используются порты 70h и 71h, причем адрес регистра подается в 70h порт, а данные читаются/пишутся через 71h порт.
Адреса CMOS с 10h по 20h защищены контрольной суммой, хранящейся по адресам 2Eh-2Fh. Поэтому изменения содержимого этих адресов необходимо сопровождать пересчетом и изменением контрольной суммы.
Порт 70h применяется не только для задания адреса CMOS, но и для разрешения или запрещения NMI (немаскируемого прерывания). Если бит 7 равен 0, то NMI разрешается, если 1 - запрещается.
Все данные RTC хранятся в двоично - десятичном формате (BCD). Байты будильника 1h, 3h, 5h служат для создания времени выработки сигнала прерывания от RTС. Каждый байт может содержать конкретное значение времени (секунды и минуты в пределах 0-59, а часы в пределах 0-23) и "безразличное" значение - код в пределах C0h-FFh, т.е. два старших разряда содержат 1.
При конкретном задании времени прерывание вырабатывается раз в сутки (2 раза при 12-ти часовом времени). Если байт часов содержит "безразличный" код, прерывание каждый час; если байт часов и минут "безразличны", прерывание каждую минуту; и при всех "безразличных" байтах - каждую секунду.
0Ah - Регистр A состояния RTC:
0Bh - Регистр B состояния RTC:
0Ch - Регистр С состояния RTC: биты состояния прерываний, только для чтения. При чтении из регистра все разряды сбрасываются.
0Dh - Регистр D состояния RTC. Бит 7=1, если CMOS получает питание; 0=нет питания от автономного источника.
0Eh - Байт результатов начального тестирования:
0Fh - Байт состояния перезагрузки. Этот байт считывается после сброса ЦП, чтобы определить не был ли сброс вызван для вывода 80286 из защищенного режима.