Из журнала Deja Vu #08, Кемерово, 1999



(C) Мистер Глюк
__________________________________________

            Ода часам
            .........

            Схема прилагается.

                     :-L не мешай, курю...

   Прошло много лет,и,по-моему,самое время
кое о чем рассказать.

                  Часы.

   Пришла в голову одному человеку(не мне)
мысль подключить часы. Так бы она и погиб-
ла (мысль), да я ее поддержал. Этот же че-
ловек и презентовал мне  для  опытов  саму
м/с 512ви1, снабдил литературой и  смылся,
вот  засел  я  за ее описание и ужаснулся.
Блин! А ведь умная штука!!!
   Сначала я ее хотел подключить  как  ay,
благо система аналогичная - регистр адреса
и регистр данных. Здесь меня  постиг  один
облом - ни в одной книжке не  сказано, что
при втором режиме доступа (а  есть  еще  и
первый, но на синклере его реализовать бу-
дет затруднительно),после установления ад-
реса нельзя отключать линию СЕ, иначе  она
забудет, какой регистр вам нужен, и  будет
работать с регистром 0 (секунды),и при по-
пытке работать с выбранным регистром полу-
чите регистр секунд.
   Второй облом постиг меня в процессе эк-
сплуатации,когда схема была запущена и от-
лажена, прошита ПЗУ, написан boot,установ-
лен резидент в iS-DOSе. По невыясненной до
сих пор причине иногда (у меня 3 раза) вы-
летает диод,который блокирует батарейку от
разряда на +5 платы компа. При  этом (пов-
торюсь, у меня)все батарейки уходят в нир-
вану, и  в лучшем случае просто загибаются
(в худшем - одна вытекла),жертв и разруше-
ний нет.
   После того,как я вновь разорился на ба-
тарейки, я решил судьбу вновь  не  испыты-
вать, и отключил питание от  платы  компа,
питая часы всегда от батареек  -  учитывая
ничтожный ток - их должно хватить  на пару
лет...
   На сегодняшний день часы эти существуют
в единственном экземпляре, и софта практи-
чески нет. НО! Есть Пзу, где они  исправно
тикают, и  по-моему, пока (заметьте, ПОКА)
этого достаточно.
   Переделке многих прог (главным  образом
системных) мешает...ничего не мешает,прос-
то делать это некому.
   Не обязательно вешать чсы  на  im2, ибо
теперь точность хода не зависит от частоты
вызова  программы  -  в  ПЗУ  часы  вообще
развязаны с прерываниями - как  видно, ра-
ботает ничем не хуже.
   Теперь  об  iS-DOSе. По-моему, вызывать
часы каждое прерывание нет нужды. Обновле-
ние  информации  происходит раз в секунды,
и поэтому последняя версия резидента пере-
печатывает время только  тогда, когда сме-
няются секунды и всего один раз - выглядит
это точно также, но убиваются (да, и здесь
убийство!) сразу n зайцев:
   1) разгружается прерывание,что для тор-
мозного iS-DOS'а немаловажно;
   2) вероятность сглюкивания cls'а умень-
шается в 50 раз.
   Поясню: при очистке экрана ldir'ом, ес-
ли  придет  прерывание  в  момент переноса
байта под часами, то весь экран будет  за-
полнен  одним  числом - выглядит противно.
После переделки драйвера эффект практичес-
ки не наблюдается(и на старуху бывает раз-
долбуха).
   Доступ к часам осуществляется посредст-
вом установки 7-го бита порта #FFFC, иначе
в адресном пространстве портов компа часов
нет.
   После установки вышеозначенного  бита в
1 возможен доступ к  портам  микросхемы: -
- #EFF7 - регистр  данных, #DFF7 - регистр
адреса.
   В регистр адреса записывается адрес не-
обходимох ячейки, в регистр данных записы-
ваются  данные  для записи в установленную
ячейку м/с, а также считываются  данные из
выбранной ячейки.
   Следует помнить, что после сброса  7-го
бита #FFFC м/с забудет, какой  регистр  вы
установили, поэтому работу с  часами реко-
мендую проводить по нижеприведенному алго-
ритму.

Пример 1, он же последний.

; запись в регистр
; H- номер регистра, L - число для записи

        LD      BC,#FFFC
        LD      A,#80
        OUT     (C),A
; включили доступ к м/с и устанавливаем рег-ры
        LD      BC,#DFF7
        OUT     (C),H; устанавливаем ячейку.
        LD      B,#EF
        OUT     (C),L; заносим значение в ячейку.

; все выключаем
        XOR     A
        LD      BC,#FFFC
        OUT     (C),A
        RET


   Теперь о том, что из себя  представляет
м/с. Для программера это устр-во  имеет 64
ячейки памяти,часть из которых занята слу-
жебными регистрами.

адрес
#00 - секунды
#01 - секунды будильника
#02 - минуты
#03 - минуты будильника
#04 - часы
#05 - часы будильника
#06 - день недели
#07 - число
#08 - месяц
#09 - две последние цифры года
#0A - служебный регистр
#0B - то же
#0C - то же
#0D - то же

#0E отсюда и до конца (#3F) - озу  пользо-
    вателя.
...
#3F

   Озу пользователя мною частично  исполь-
зовано:

 #0E - режим  запуска  boot'ов (48/128/вся
память);
 #0F - сейчас не использую(в ранних верси-
ях был атрибут часов);
 #10 - номер дисковода;
 #11 - байт #АА - контроль  наличия  м/с и
необходимости  вывода  часов. Кнопка "2" в
Глюке инвертирует этот байт;
 #12 - флаг "user message", если = "G", то
вместо стандартного "MR GLUK RESET SERVICE
V5.1" будет выводится мессага из часов.
   Она начинается с адреса #13 и  заканчи-
вается байтом #ff, длина не более 30 байт,
контрольные коды не допускаются(будут взя-
ты из пзу'шного знакогенератора и  выведе-
ны).

   Теперь подробнее. Строго говоря, пример
1 несколько не точен. Им можно пользовать-
ся только для байтов #0A-#3F,а для служеб-
ных байтов часов  процесс  доступа  к  м/с
нескольно иной.
   Дело в том, что операция  чтения/записи
может прийтись на момент обновления инфор-
мации в часах, а это происходит каждую се-
кунду, что чревато боком.
   Для обхода подобной ситуации есть  спе-
циальный бит в одном из служебных  регист-
ров,который предугадывает процесс обновле-
ния. Если  бит = ок,  то  некоторое  время
(нормируется,да я забыл) м/с гарантирован-
но не будет обновляться. Из практики выяс-
нилось, что этого времени  достаточно  для
считывания/записи любой ячейки.
   В Глюке, если происходит  обновление  в
часах, то цикл пропускается,визуально это-
го не заметно ( часы выводятся чаще, чем 1
раз в секунду, хотя в iS-DOS'е с этим  по-
кончено).

   Итак, после всего вышеизложенного стало
ясно, что после собирания схемы просто так
в Глюке часы не пойдут. Что нужно для  то-
го, чтобы они пошли:

* занести в #11 байт #AA,в #0A- %00100000,
в #0B - %00000010, в регистры часов, минут
и секунд - время,  дату  тоже  желательно.
М/с сама считает сколько дней в месяце,ви-
сокосные годы тоже учитываются,можно авто-
матически в определенные дни сделать  так,
что произойдет перевод с  летнего  времени
на зимнее, да я это не использовал (только
перевод не сделал, а остальное  все  само.
Также будильник я не  пробовал - знаю, что
он включается 5-м битом #0B, а сам не  ис-
пользовал). Если, однако, возникнет  жела-
ние  его  использовать, то над днем недели
выводится символ  часиков, если  будильник
включен - а вдруг кому надо? - так  я  уже
сделал.

По схеме.
   DD1 - 555ЛЕ1, DD2 - 555ЛЛ1, в  качестве
DD3 лучше использовать 555ТМ8, но можно  и
ТМ2, однако,ТМ8 имеет 4 бита,а ТМ2 - толь-
ко два. Если вас интересуют дальнейшие до-
работки по  megascreen  порту, то  ставьте
ТМ8.
   Глюк запирает озу свыше 128  1-м  битом
#FFFC, ROM-disc активируется 6-м битом, 0-
-ой бит включает дополнительный  графичес-
кий режим, 5-ый бит подключает пзу тырдоса
и дает возможность работать  с  регистрами
ВГ-шки непосредственно.
   После сборки схемы возникнет неприятное
явление - #fffc является четным адресом, и
во избежание дрыгания бордюром надо поста-
вить блокировку выборки порта #fe при  вы-
борке #fffc - все камни кидать в Пуги, ибо
такой  идиотский  адрес  порта  расширения
графики придумал не я, а  он, а  я  только
продолжил биты,дабы не городить новых пор-
тов.
   Точность хода  можно  регулировать, для
этого нужно вместо одного из конденсаторов
поставить подстроечник.
   По поводу ROM-DISCа. Реальной схемы та-
к я не сделал. Но! Все необходимое имеется
в Глюке. Доступ осуществлен следующим  об-
разом:

* устанавливается 6 - ой бит #fffc,что от-
ключает  стандартное  пзу  и подключает р-
-диск, проверяется байт по  адресу 0, если
он не равен #ff(не вставлена м/с) и не ра-
вен #f3 (нет никакого р-диска, стандартное
пзу)то происходит RST 0 при живой системе;
т.е можно пользоваться интерфейсом из глю-
ка (так задумывалось). Т.о., р-диск  имеет
размер 64 кб, что мало, но недорого.
   Весьма перспективна м/с 27010 (128 кб),
что позволяет иметь и  р-диск  и  основное
пзу в одном корпусе, и не нужна схема ком-
мутации.  Путем  задействования  свободных
битов порта, размер р-диска можно увеличи-
вать до необходимого предела.

   Сейчас я все это считаю гиблым делом.

   Кстати, для коммутации окон  р-диска  и
нужен 5-ый бит #fffc - коммутирует а15  р-
-диска, а14 управляется через  порт #7ffd,
как бит basic128.
__________________________________________