5 / 5 856
Версия для печати
Использование микросхем RTC часов в ZX-Spectrum
За последние 10-15 лет, наверное, уже много было сказано про использование часовых микросхем в ZX-Spectrum. Так что эта статья не будет открытием или чем-то принципиально новым. Здесь я постараюсь просто и занятно рассказать об использовании специализированных "часовых" микросхем семейства MC146818 и их более "продвинутых" собратьев в компьютере ZX-Spectrum.
Зачем вообще нужны часы в компьютере? Вопрос интересный и с первого взгляда кажется банальным. Конечно же для того, чтобы знать текущее время. А зачем это надо? Мне, как пользователю, удобнее кинуть взгляд на часы на стене или на руке. Т.е. мне непринципиально узнавать время именно от компьютера, за которым я работаю. Всё-таки часы в компьютере более нужны самому компьютеру.
Следующий вопрос - а для каких таких целей компьютеру могут быть нужны часы? Для игр? Вроде бы нет. Для системных программ тоже не особо эти часы нужны. В ленточных копировщиках используется отсчёт времени загрузки программ, но там нужны не часы, а секундомер, что с успехом реализовано от внутренних прерываний. В TR-DOS и при работе с магнитофоном вроде бы нет никаких программ, которые использовали бы текущее время и дату. Разве что какие-нибудь картотеки и базы данных...
А вот при наличии полноценной операционной системы с нормальной файловой системой текущее время и дата очень даже актуальны. Всё дело в том, что у файла есть понятие как время и дата его создания или модификации, чтобы было легко узнать когда файл был создан или последний раз изменён. Ярким примером тому является операционная система iS-DOS. Для неё даже программу специальную написали, которая загружается при старте системы и просит ввести текущую дату:
Микросхемы часов реального времени
Как же ввести в компьютер часы, которые не останавливаются при выключении компьютера? Как обычно, всё уже давно придумали буржуины - у них есть микросхема часов реального времени (RTC - Real-Time Clock) - Motorola MC146818 (или аналогичная - у других фирм).
Аналог MC146818
Аналог MC146818
Микросхема представляет собой устройство, позволяющее работать в составе микропроцессорной системы. Т.е. она способна по определённым сигналам выдавать на общую шину данные о текущем времени/дате или наоборот, записывать в свою память данные (если надо изменить время/дату). Микросхема требует "обвязку" из внешних элементов, кварцевый резонатор и, конечно же, батарейку, от питания которой внутри микросхемы "тикают" часы, когда компьютер выключен. Микросхема в отключенном режиме (когда к ней нет обращения со стороны процессора) потребляет такой мизерный ток (микроамперы), что от обычной батарейки в 4,5В может работать очень и очень долго.
Помимо часов микросхема имеет в себе 50 байт энергонезависимого ОЗУ. Именно из-за этого микросхему HD146818 ставили повсеместно в материнские платы IBM PC AT. В ячейках ОЗУ микросхемы удобно хранить текущие настройки BIOS. В ZX-Spectrum эти ячейки тоже используются, правда единого стандарта на их использование не существует. Мне точно известно, что Quick Commander хранит в часах некоторые свои настройки. А также ячейки памяти часов я использовал в BIOS для компьютера Pentagon для хранения настроек собственного BIOS'а.
На особенностях MC146818 я остановлюсь несколько подробнее, это в дальнейшем позволит без особого труда разобраться с дальнейшими модификациями этой микросхемы.
Особенности микросхемы MC146818
Внешний кварцевый резонатор с соответствующей "обвязкой". Вот минимальная схема включения из даташита на MC146818:
Не знаю как у других, но у меня такое включение кварца работало не всегда устойчиво. Вернее пока компьютер был включен, всё работало как надо. Но в выключенном состоянии микросхема могла ускорить ход часов или наоборот, замедлить его. Не раз микросхема самовозбуждалась, результатом чего было повышенный ток потребления от батарейки и быстрый разряд последней.
Не буду утверждать, но подозреваю, что такие проблемы преследовали и разработчиков IBM PC AT, потому что в материнских платах 286-х компьютеров использовалась совершенно другая схема включения кварцевого резонатора:
Как видно, разработчики не доверились внутреннему генератору микросхемы часов и сделали внешний генератор на микросхеме MC14069. Она отличается микромощным энергопотреблением. Так как она питается от батарейки, то это актуально. Несмотря на кажущуюся сложность этой схемы она работает замечательно. Я гарантирую это! Повторял, проверял - работает. Если не верите мне, то посмотрите на 286-й компьютер - в нем всё хорошо работает :)
Следующая особенность микросхемы - требуется обеспечение безглючного хранения информации в ячейках памяти часов в любом режиме работы. Вся проблема состоит в том, что при включении компьютера на шинах происходят переходные процессы (сигналы могут меняться хаотически), что в определённой комбинации может вызвать порчу данных в ячейках микросхемы.
Проблема существенная. Когда я экспериментировал с микросхемами часов, то часто получал порчу информации в них именно из-за этого.
Казалось бы для этой цели нужно просто подать уровень лог.1 на вход выбора микросхемы - /CE (13-й вывод). Но тут не всё так просто. Уровень лог.1 должен поддерживаться даже когда компьютер выключен. Т.е. опять же требуется питание схемы коммутации от батарейки. А как тогда получить доступ к часам? Потребуется какими-то внешними схемами подавать лог.0 на вход выбора микросхемы. Т.е. получается по-любому этот вход будет "завязан" на внутренние шины компьютера, на которых при включении будут происходить переходные процессы. Замкнутый круг получается какой-то...
Но выход есть. Взглянем снова на схему включения MC146818 в 286-м компе:
Очень остроумное решение - для разрешения работы микросхемы используется сигнал Power Good от источника питания AT. В выключенном состоянии он "притянут" к общему проводу. Сигнал инвертируется на MC14069 и подаётся на микросхему часов. Таким образом убиваются сразу два зайца - обеспечивается подача лог.1 на вход выбора часов даже при выключенном питании и обеспечивается безглючное хранение информации. После включения питания компьютера сигнал Power Good переходит в лог.1 только когда, когда все напряжения на выходах источника питания придут в норму, и компьютер начнёт работу.
В ZX-Spectrum тоже можно сделать так. А если в источнике питания нет сигнала Power Good, то эта проблема тоже решается, но об этом чуть позже.
Третья особенность состоит в том, что процессор компьютера может получить доступ к микросхеме целыми двумя способами. Микросхема сама автоматически определяет по какому стандарту к ней обращаются и ведёт себя соответствующим образом.
Существует два стандарта обращения процессора компьютера к мкросхеме часов - стандарт "Motorola" и "Intel". Различие между ними состоит в различных способах передачи данных микросхеме.
Микросхема имеет два входа выбора режима работы - работа с адресом ячейки памяти и работа с данными, содержащимися в указанной ячейке. Это входы AS и DS. Вход AS называется "строб адреса", а вход DS называется "строб данных".
В режиме шины "Motorola" порядок обращения к микросхеме таков:
Видим, что положительным импульсом на входе AS микросхеме указывается, что на шине данных находится номер регистра, с которым мы хотим работать. А далее положительным импульсом на входе DS указываем микросхеме, что нужно прочитать или записать данные из выбранного регистра на шину данных. Режим чтение/запись определяет состояние входа R/W при положительном импульсе на DS - при лог.0 будет осуществлена запись данных с шины в микросхему.
А теперь посмотрим, как же нужно работать с микросхемой в режиме шины "Intel":
Номер регистра выбирается так же, как для шины "Motorola" - положительным импульсом на входе AS. А вот дальше идут различия. Если хотим прочитать данные из регистра, то делаем отрицательный импульс на входе DS. А если надо записать данные в регистр, то делаем отрицательный импульс на входе R/W.
Как же тогда микросхема определяет в каком режиме ей надо работать? Всё просто - дело в том, что принцип выбора номера регистра у микросхемы одинаков. И когда мы выбираем номер регистра, микросхема смотрит на состояние входа DS. Получается так - по срезу импульса AS (это когда он переходит от 1 к 0) микросхема анализирует какой уровень на входе DS. Если там лог.0, то считается, что работа идёт в режиме шины "Motorola", а если там лог.1 - то в режиме шины "Intel".
Вот так всё просто. На самом деле, очень удобно для подключения к микропроцессорным системам с различными способами адресации.
Советский аналог MC146818 - КР512ВИ1
В 80-х годах советской промышленностью начал производиться аналог MC146818 - микросхема КР512ВИ1. Она является почти полным аналогом, т.е. можно непосредственно заменить одну микросхему на другую без каких-либо доработок конструкции. Различие между КР512ВИ1 и зарубежными аналогами состоит в несколько ином порядке представления дней недели. В зарубежных микросхемах первым днём недели (1) считается воскресенье. А в КР512ВИ1 воскресенье нумеруется цифрой 1 только если включен автопереход на зимнее/летнее время. Ныне такой переход неактуален, поэтому при его отключении нумерация дней недели становится более привычной нам - первым днём недели (1) считается понедельник.
Впрочем нумерация дней недели это условность. Микросхема сама не высчитывает по установленной в ней дате какой день недели приходится на эту дату. Т.е. пользователь сам записывает в регистр дня недели нужное число. Поэтому микросхеме абсолютно безразлично с какого дня начинается неделя, она просто увеличивает при смене суток число в регистре дня недели на 1. Вопрос состоит лишь в том, чтобы внешняя программа, которая считывает значения часов, правильно интерпретировала эти цифры.
У нас в Беларуси микросхема выпускалась с 1984 года заводом "Интеграл":
КР512ВИ1 производства завода ″Интеграл″
КР512ВИ1 производства завода ″Интеграл″
Позже выпускалась с маркировкой завода "Транзистор":
КР512ВИ1 производства завода ″Транзистор″. Год выпуска - 1998
КР512ВИ1 производства завода ″Транзистор″. Год выпуска - 1998
Микросхема в Минске продаётся и сейчас. На конец 2011 года распродаются остатки выпуска 2002 года. Более полную информацию можно узнать с сайта завода "Транзистор".
КР512ВИ1 производства завода ″Транзистор″. Год выпуска - 2002. Это одна из самых новых выпущенных микросхем
КР512ВИ1 производства завода ″Транзистор″. Год выпуска - 2002. Это одна из самых новых выпущенных микросхем
Также существует вариант КА512ВИ1 в корпусе для поверхностного монтажа.
Это КА1835ИД1. В очень похожем корпусе выпускалась КА512ВИ1. Это я к тому, что это уж больно необычная микросхема
Это КА1835ИД1. В очень похожем корпусе выпускалась КА512ВИ1. Это я к тому, что это уж больно необычная микросхема
К сожалению достать микросхему КА512ВИ1 пока не удалось (она давно не производится).
Дальнейшее развитие микросхем часов
Прогресс не стоит на месте, поэтому в скором времени после MC146818 появились её аналоги со встроенным кварцевым резонатором и литиевой батарейкой. Всё это было помещено внутрь корпуса:
DS12887 - аналог MC146818 со встроенными батарейкой и кварцевым резонатором
DS12887 - аналог MC146818 со встроенными батарейкой и кварцевым резонатором
Действительно, очень удобно - не надо городить обвязку на кварц и контроль питания. Микросхема сама всё делает. Сохранность информации гарантируется. Можно вообще достать микросхему из розетки, и время всё равно будет идти. Использовать такую микросхему у себя в конструкциях - одно удовольствие.
Встроенной батарейки хватает примерно лет на 10 работы (в моём случае микросхема, купленная в 2006 году, работает и в 2021-м году, срок батареи уже 15 лет). После этого микросхему приходится банально выбрасывать. Жалко, однако. Поэтому хитрые пользователи решили ремонтировать микросхему с целью замены батарейки на новую. Новая батарейка выводится наружу, после чего микросхема становится "вечной". Надо только раз в 10 лет менять батарейку :)
Компания Dallas выпустила много вариантов микросхем часов. Я остановлюсь лишь на некоторых.
DS1287 - полный аналог MC146818;
DS12887 - то же самое, только внутренняя память увеличилась с 50 байт до 114;
DS12887A - то же самое, что и DS12887, только добавлен вход для очистки всех ячеек памяти микросхемы;
DS12B887 - то же, что и DS12887, но работает только в режиме шины "Intel".
Существует "облегчённый" по сравнению с DS12887 вариант микросхемы часов - без встроенной батарейки и кварца. От MC146818 отличается тем, что вся "обвязка" для кварца и батарейки не нужна. Т.е. подключаем напрямую к микросхеме кварц и батарейку, а все контролирующие их цепи уже размещены в самой микросхеме. Это микросхемы семейства DS1285, DS12885.
VT82855 - аналог DS12885
VT82855 - аналог DS12885
Различия между DS1285 и DS12885 состоит в различном количестве свободных ячеек памяти.
Подключение микросхем часов к ZX-Spectrum
Одной из первых публикаций по использованию микросхемы часов КР512ВИ1 совместно с компьютером является статья "Часы в компьютере", опубликованная в "Радиоежегоднике" за 1989 год. В ней была подробно описана работа микросхемы КР512ВИ1, дана схема подключения микросхемы к компьютеру "Радио-86РК" с примерами программ. Статья даёт хорошую теорию по работе микросхемы часов.
В компьютерах ZX-Spectrum часы устанавливались в контроллер SMUC для Scorpion ZS-256 и в Profi.
Для всех остальных клонов ZX-Spectrum подключение часов на КР512ВИ1 стало возможным благодаря статьям от Mr.Gluk в электронном журнале Deja Vu #08:
Также заслуживает снимания публикация "CMOS для всех" из электронной газеты Optron #31.
Использование портов, по которым можно было обращаться к часам, стало неким стандартом для ZX-Spectrum и было поддержано в многих программах:
#DFF7 - задаёт номер регистра, с которым мы хотим работать;
#BFF7 - порт данных, через него передаются данные в микросхему/из неё;
#EFF7 - бит 7 этого порта управляет доступом к микросхеме (0 - доступа нет, 1 - доступ есть).
На деле схема от Mr.Gluk являлась "базовой" и могла дополняться более полным адресным дешифратором портов и более надёжным включением питания от батареи. Самой надёжной схемой для меня оказалась схема, которую я приводил выше для 286-х компьютеров:
В этой схеме показано включение КР512ВИ1 для надёжного хранения информации. Цифровая часть схемы (дешифратор портов и т.п.) не приведена. Подразумевается, что по этой схеме микросхему можно подключать к какому угодно компьютеру по произвольному стандарту адресов портов. Схема проверена мной на нескольких компьютерах. Глюков не обнаружено.
Пояснения по схеме: в качестве микросхемы DD' крайне желательно использовать MC14069. У неё микромощный ток потребления от батарейки. Другие аналоги (CD4069 или К561ЛН2) имеют ток потребления в разы (в десятки раз) больше и будут быстрее "подсаживать" батарейку. Так как в ZX-Spectrum может и не стоять AT-питатель с сигналом Power Good, поэтому было решено сэмулировать этот сигнал. Не секрет, что в ширпотребных источниках питания AT в качестве формирователя сигнала Power Good может не устанавливаться "настоящая" схема контроля напряжений питания, а зачастую ставится банальное реле времени, которое через некоторое время после включения питания выдаёт сигнал Power Good и всё. Так я и поступил - сделал простейшее реле времени. После включения питания компьютера микросхема КР512ВИ1 выключена высоким уровнем напряжения на входе /CS, а спустя полсекунды/секунду реле времени включит микросхему на доступ.
В схеме включения КР512ВИ1 от Mr.Gluk используется стандарт шины "Motorola". Один из моих вариантов адресного дешифратора для этого стандарта для ZX-Spectrum:
А это схема включения VT82855 с шиной "Intel":
Вообще шина "Intel", похоже, является основной для микросхем такого типа, поэтому имеет смысл рассчитывать адресный дешифратор именно для неё. Есть модификации микросхем (DS12B887, VT82885), в которых поддерживается только шина "Intel".
Практическое применение микросхем часов в ZX-Spectrum
В ZX-Spectrum для работы в системе iS-DOS есть программа date+3.com для считывания даты из микросхемы часов, подключенной через контроллер SMUC. Для работы с часами по стандарту от Mr.Gluk я встречал резидент, который показывал текущее время, а также я написал две программы - rtc.com и cmos_dat.com. Они есть на этом сайте на странице с программами для iS-DOS.
Напоследок небольшая фотогалерея самодельной периферии для ZX-Spectrum с часами (все представленные устройства взяты с рабочих компьютеров и исправно функционируют):
Контроллер PS/2 клавиатуры и мыши с часами на MC146818, включенными по схеме от 286-го компьютера
SMUC на дискретных элементах с часами КР512ВИ1, включенными по схеме от 286-го компьютера
Контроллер PS/2 клавиатуры и мыши с часами на MC146818, включенными по схеме от 286-го компьютера
SMUC на дискретных элементах с часами КР512ВИ1, включенными по схеме от 286-го компьютера
ZX-Multicard с часами на VT82885
ZX-Multicard с часами на VT82885
Особенности включения вывода PS
В микросхемах КР512ВИ1, MC146818 имеется вход PS (вывод 22). Это так называемый вход датчика питания. Он должен включаться таким образом, чтобы даже при кратковременном пропадании напряжения питания микросхемы напряжения на нём падало до нуля. Для этого он включался через RC-цепочку к выводу питания (24 вывод) микросхемы часов:
Делается это для того, чтобы можно было проконтролировать исчезало ли напряжение резервного питания. Если исчезало, то данные в памяти микросхемы часов можно было считать недостоверными, т.к. они могли при перебоях с питанием попросту исказиться. Для определения пропадало ли питание, служит бит 7 регистра #0D микросхемы часов. Если на входе PS напряжение падало до 0, то этот бит установится в 0.
Можно немного изменить схему включения КР512ВИ1 - завязать вход PS только на питание +5В:
В этом случае на входе PS напряжение упадёт до 0 при отключении питания +5В. Это позволит, к примеру, узнать, что компьютер отключался. На практике я использовал эту особенность в компьютере Pentagon в собственном BIOS для вывода заставки при включении компьютера.
Также необходимо помнить, что регистр #0E микросхемы часов работает по принципу триггера. После чтения бита 7 этот бит автоматически устанавливается в 1.
В следующих типах микросхем часов вход PS уже сразу разведен "внутри" микросхемы и наружу не выходит. Таким образом, повторить такую же "фишку", как с контролем напряжения питания только +5В в этих микросхемах не выйдет.
Документация по микросхемам часов и тематические ссылки
Документация: |
|
|
Статья "Часы в компьютере" из журнала "Радиоежегодник" за 1989 годОписание КР512ВИ1, подключение микросхемы часов к компьютеру Радио-86РК
|
|
|
Обобщённая информация по КР512ВИ1, которую я составил сам
|
|
|
Информация по схеме включения микросхемы часов MC146818 в IBM PC AT 286
|
|
|
Описание микросхем КР512ВИ1 и КА512ВИ1 из книги "Микросхемы для бытовой радиоаппаратуры. Дополнение третье: Справочник / И.В. Новаченко и др., М.: Радио и связь, 1993"
|
|
|
Краткая техническая спецификация КР512ВИ1 с сайта завода "Транзистор"
|
|
|
Краткая техническая спецификация КА512ВИ1 с сайта завода "Транзистор"
|
|
|
Справочный лист на КР512ВИ1 - конструкторская документация с описанием характеристик и режимов работы микросхемыНеважное качество исходного бумажного документа
|
|
|
Схемы правильного включения КР512ВИ1 в разных режимах шины (Motorola и Intel), включение батарейки и кварца
|
Вся конструкторская документация по микросхемам часов и документация с сайта завода "Транзистор" размещены с разрешения администрации сайта завода |
Ссылки на полезные ресурсы: |
http://transistor.by/ Сайт завода "Транзистор" |
КР512ВИ1 на форуме завода "Транзистор" |
Восстановление микросхем Dallas со встроенной батарейкой. Или что делать, если села встроенная в микросхему батарея |
Выражаю отдельную благодарность администрации сайта завода "Транзистор" за помощь в получении информации по микросхемам КР512ВИ1 и КА512ВИ1.