В 90-х я запускал ВИ1 по инструкции из Радиоежегодника-89 (легко прогугливается в djvu), в т.ч. и начальную программу использовал сначала именно ту что публиковалась там, только перевел в мнемоники Z80, она потом "обросла мясом", перетекла в драйвер для CP/M и т.п. Но инициализация и режимы скорее всего остались "как в учебнике", и описываемой проблемы я не припоминаю. Кстати, режимы используются другие чем например в VC Ориона-ПРО (например режим BCD-счета, возможно и другие). А проблема на всех экземплярах ВИ1 воспроизводится?
Вот как оно в коде инициализируется:
Скрытый текст
Код:ADDRVI EQU 0F760H ; ; инициализация апп. часов LD BC,270AH ; ПИШЕМ В РЕГ. А Q=32768 Гц SQW=512 Гц call VIset LD BC,860BH ; ЗАПРЕТИТЬ СЧЕТ, ДВОИЧНЫЙ ФОРМАТ call VIset LD C,0 ; УСТАНОВИТЬ СЧЕТЧИКИ: LD A,(SEC) LD B,A ; СЕКУНД call VIset LD C,2 LD A,(MIN) LD B,A ; МИНУТ call VIset LD C,4 LD A,(HOUR) LD B,a ; ЧАСОВ call VIset LD BC,060Bh ; РАЗРЕШИТЬ СЧЕТ ; ; Set byte to 512VI1 CMOS. Inp: C=register(address), B=value ; VIset: SetVI128: ld (ADDRVI),bc ret[свернуть]
И далее так используется:
Скрытый текст
Код:; получить дату в формате ДД:ММ:ГГ IGETDT: ld hl,BUFFER+17 ld de,BUFFER+20 ld bc,17 lddr CALL GETDAT0 ld hl,DAY ld de,BUFFER ld bc,3 ldir ld a,3 jp ADDNBF GETDAT0:LD A,(VI1) ; 0 - программ., 1 - 512ВИ1 OR A RET Z ; выход, если прогр. часы GETDAT1:LD C,0Ah call VIget RLCA JR C,GETDAT1 ; цикл, если идет обновление LD C,7 call VIget ld (DAY),a ld C,8 call VIget ld (MON),a ld C,9 call VIget ld (YEAR),a ret ; установить дату в формате ДД:ММ:ГГ ISETDT: ld hl,PARBUF ld de,DAY ld bc,3 ldir LD A,(VI1) ; 0 - програм., 1 - 512ВИ1 OR A RET Z ; установка даты апп. часов SETDAT1:LD C,0Ah call VIget RLCA JR C,SETDAT1 ; цикл, если идет обновление LD C,7 ; УСТАНОВИТЬ СЧЕТЧИКИ: LD A,(DAY) LD B,A ; дней месяца call VIset LD C,8 LD A,(MON) LD B,A ; месяцев call VIset LD C,9 LD A,(YEAR) LD B,a ; лет jp VIset ; ; Get byte from 512VI1 CMOS. Inp: C=register(address), Out:A=value ; VIget: GetVI128: ld a,c ld (ADDRVI),a ld a,(ADDRVI+1) ret[свернуть]
Из того что еще вспоминается: никак не работало тогда корректное определение сбоя регистров часов по пропаданию питания (в ВИ1 есть спец бит в каком-то регистре). Не работало как описано: то нормально определит, то глюк, так и не понял почему. И в итоге стали тупо писать в некоторые ячейки пользовательского ОЗУ ВИ1 некий хеш, и при старте ОС проверять его как флаг того что данные валидны. Т.е. в реальной ВИ1 не всё может быть как оно в теории в даташите.
Что забавно: работы с ВИ1 начал только потому, что случайно купил этот Радиоежегодник (в 89г. у меня еще не было Ориона, я тогда тупо скупал в книжном все интересные журналы по радиотехнике, и должен заметить, во Владимире их было очень мало, даже приходилось посидеть в библиотеке в охотку) и также случайно году в 93-94 когда Орион у меня уже был, в магазе что-то очень задешево продавались сами ВИ1.





Ответить с цитированием