Assembler - язык неограниченных возможностей

сменим цепь газораспределения быстро

Часы реального времени и CMOS-память


В каждом компьютере есть микросхема, отвечающая за поддержку текущей даты и времени. Для того чтобы они не сбрасывались при каждом выключении питания, на микросхеме расположена небольшая область памяти (от 64 до 128 байт), выполненная по технологии CMOS, позволяющей снизить энергопотребление до минимума (фактически энергия в таких схемах затрачивается только на зарядку паразитных емкостей при изменении состояния ячеек памяти). Вся эта микросхема получает питание от аккумулятора, расположенного на материнской плате, и не отключается при. выключении компьютера. Для хранения собственно времени достаточно всего четырнадцати байт такой энергонезависимой памяти, и остальная ее часть используется BIOS для хранения различной информации, необходимой для корректного запуска компьютера. Для общения с CMOS и регистрами RTC выделяются порты ввода-вывода от 70h до 7Fh, но только назначение портов 70h и 71h одинаково для всех материнских плат:

    порт 70h для записи: индекс для выбора регистра CMOS:

    бит 7: прерывание NMI запрещено на время чтения/записи

    бит 6: собственно индекс

порт 71h для чтения и записи: данные CMOS

После записи в порт 70h обязательно надо выполнить запись или чтение из порта 71h, иначе RTC окажется в неопределенном состоянии. Содержимое регистров CMOS варьируется для разных BIOS, но первые 33h регистра обычно выполняют следующие функции:

    00h: RTC — текущая секунда (00 – 59h или 00 – 3Bh) — формат выбирается регистром 0Bh, по умолчанию — BCD

    01h: RTC — секунды будильника (00 – 59h или 00 – 3Bh или FFh (любая секунда))

    02h: RTC — текущая минута (00 – 59h или 00 – 3Bh)

    03h: RTC — минуты будильника (00 – 59h или 00 – 3Bh или FFh)

    04h: RTC — текущий час: