Black Crow #07
01 сентября 2001

Программистам - Работа с CMOS часами.

<b>Программистам</b> - Работа с CMOS часами.
                                         
                                         
ПРОГРАММИРУЕМ CMOS на К512ВИ1  
(процедуры обработки часов)    
                                         
Pantera                                  
                                         
_________________________________________
                                         
                                         
     Да,все кричат  вокруг  Cmos-часы это
рулез,круто.Вот если бы хоть кто-то пока-
зал как под них кодить.Я эти часики  себе
давно уж как  собрал  и теперь решил, раз
ни кто не хочет поделится с народом о ме-
тодах   программирования,  то  значит это
суждено:-) сделать мне.                  
                                         
Доступ  к  часам   осуществляется   через
регистр  управления   #EFF7  с маской #80
включения и #00 маской выключения.       
                                         
Часы имеют также два регистра передачи:  
                                         
Регистр адреса  #DFF7 который  заказывает
нужную ячейку памяти в Cmos. Этот регистр
работает только на запись.               
                                         
Регистр данных #BFF7 через который проис-
ходит запись/чтение значений Cmos.       
                                         
       LD   ВС,#DFF7                     
       LD   Н,#11     ;открываем ячейку  
       OUT (С),Н      ;#11               
       LD   ВС,#BFF7                     
       LD   L,#AA     ;записываем в эту  
       OUT (С),L      ;ячейку #AA        
       RET                               
                                         
;для чтения из ячейки                    
                                         
       LD   ВС,#BFF7                     
       IN   A,(С)     ;читаем из порта   
       СР   #AA       ;байт наличия cmos 
       RET  Z                            
       RET                               
                                         
                                         
Ну а вот u тело программы:     
                                         
                                         
;ОБРАБОТКА АППАРАТНЫХ CMOS ЧАСОВ         
;WRITEN ВУ (С)Pantera 2001               
;V2.1                                    
;УСТАНОВКА РЕГИСТРОВ МИКРОСХЕМЫ          
;В Н,АДРЕС  В L,ЗНАЧЕНИЕ                 
;Ячейки в которые заносятся значения:    
                                         
;#00-СЕКУНДЫ                             
;#02-МИНУТЫ                              
;#04-ЧАСЫ                                
;#06-ДЕНь НЕДЕЛИ                         
;#07-ЧИСЛО                               
;#08-МЕСЯЦ                               
;#09-ГОД                                 
                                         
;Теперь о контрольных байтах cmos,которые
;заносятся в ячейки #11,#0A,#0В перед ра-
;ботой cmos.                             
                                         
;#11-#AA БАЙТ НАЛИЧИЯ ЧАСОВ.ОБЯЗАТЕЛьНО!!
;        ИСПОЛьЗУЕТСЯ ДЛЯ ОБНАРУЖЕНИЯ ЧА-
;        СОВ В СИСТЕМЕ, ПРОГРАММАМИ.     
;#0А-32  ОБЯЗАТЕЛьНО ЗАНЕСТИ ЭТО ЗНАЧЕНИЕ
;#0В-2   ОБЯЗАТЕЛьНО ЗАНЕСТИ ЭТО ЗНАЧЕНИЕ
                                         
                                         
                                         
       ORG #8000                         
       JP СНЕСК                          
                                         
;----------------------------------------
R_SEL  DEFW #EFF7     ;РЕГИСТР УПРАВЛЕНИЯ
R_DATA DEFW #BFF7     ;РЕГИСТР ДАННЫХ    
R_ADRS DEFW #DFF7     ;РЕГИСТР АДРЕСА    
ON     DEFB #80       ;МАСКА ВКЛЮЧЕНИЯ   
OFF    DEFB #00       ;МАСКА ВЫКЛЮЧЕНИЯ  
;----------------------------------------
                                         
;-------ПРОВЕРКА НАЛИЧИЯ CMOS------------
                                         
СНЕСК  CALL OPEN      ;ОТКРЫВАЕМ     CMOS
       LD Н,#11       ;ПИШЕМ В #11 ЯЧЕЙКУ
       LD ВС,(R_ADRS)                    
       OUT (С),Н                         
       LD L,#AA       ;#AA В  ЯЧЕЙКЕ  #11
       LD ВС,(R_DATA) ;ДЛЯ       ПРОВЕРКИ
       OUT (С),L      ;НАЛИЧИЯ    МИКРУХИ
                                         
;---------ПРОЦЕДУРА ЧТЕНИЯ ИЗ ПОРТА------
                                         
       LD Н,#11       ;ОТКРЫВАЕМ   ЯЧЕЙКУ
       LD ВС,(R_ADRS)  ЗАПИСЫВАЕМ  ЗНАЧЕ-
       OUT (С),Н      ;НИЕ В РЕГ.  АДРЕСА
       LD ВС,(R_DATA) ;ЧИТАЕМ ИЗ РЕГИСТРА
       IN A,(С)       ;ДАННЫХ  ЧИСЛО  #AA
       СР #AA         ;СРАВНИВАЕМ        
       PUSH AF                           
       CALL CLOSE                        
       РОР AF                            
       JR Z,CMOS                         
       RET            ;НЕТ ЧАСОВ         
                                         
CMOS   CALL OPEN                         
       LD HL,#0A20    ;В ЯЧЕЙКУ #0А НУЖНО
       CALL W_CMOS    ;ЗАНЕСТИ #20!!!    
       LD HL,#0В02    ;В ЯЧЕЙКУ #0В НУЖНО
       CALL W_CMOS    ;ЗАНЕСТИ #02!!!    
       CALL CLOSE                        
       LD A,7         ;ЕСЛИ ЕСТь  ЧАСЫ ТО
       OUT (#FE),A    ;БОРДЕР БУДЕТ БЕЛЫМ
       RET                               
                                         
;---ПРОЦЕДУРА ОТКРЫТИЯ ДОСТУПА К CMOS----
                                         
OPEN   LD ВС,(R_SEL)  ;ОТКРЫВАЕМ    CMOS 
       LD A,(ON)      ;УСТАНОВКОЙ БИТА 7 
       OUT (С),A      ;                  
       RET                               
                                         
;---ПРОЦЕДУРА ЗАКРЫТИЯ ДОСТУПА К CMOS--- 
                                         
CLOSE  LD A,(OFF)     ;ВСЕ ОТРУБАЕМСЯ    
       LD ВС,(R_SEL)                     
       OUT (С),A                         
       RET                               
                                         
;---ПОДПРОГРАММА ДЛЯ ЗАПUCU ЗНАЧEНUЙ В CMOS-ЧАСЫ------------- 
;ЗАПUCЬ ЧЕРЕЗ PEГUCTP HL, В Н-ЯЧЕЙКА, В L-ЗНЧEНUE             
                                         
W_CMOS LD ВС,(R_ADRS)                    
       OUT (С),Н                         
       LD ВС,(R_DATA)                    
       OUT (С),L                         
       RET                               
                                         
                                         
Это процедура тикания часов:   
                                         
;исходники взяты из прoграииы Мг.Gluk Reset Service 5.3k      
                                         
:ВЫВОД ВРЕМЕНИ И ДАТЫ НА ЭКРАН 
                                         
М1     CALL CMOS_R                       
       JP М1                             
                                         
                                         
CMOS_R EXX                               
       CALL CMOS_3                       
       LD HL,10072                       
       EXX                               
       RET                               
CMOS_3 LD HL,#5815                       
       CALL LLAFбЗ                       
       LD DE,#4015                       
       LD Н,#0В                          
       CALL LLAF2В                       
       BIT 5,A                           
       JR Z,LLADB9                       
       LD A,#0С                          
       CALL LLAE45                       
       LD A,#0В                          
       CALL LLAE45                       
       LD A,#0В                          
       CALL LLAE45                       
       DEC Е                             
       DEC Е                             
       DEC Е                             
LLADB9 INC Е                             
       INC Е                             
       INC Е                             
       LD Н,#04                          
       CALL LLAE19                       
       CALL LLAE1Е                       
       LD Н,#02                          
       CALL LLAE19                       
       CALL LLAE1Е                       
       LD Н,#00                          
       CALL LLAE19                       
       LD HL,#5835                       
       CALL LLAFбЗ                       
       LD Н,#06                          
       CALL LLAF2В                       
       LD DE,#4035                       
       JR С,LLADF8                       
       DEC A                             
       LD HL,LLAEE3                      
       ADD A,A                           
       ADD A,L                           
       LD L,A                            
       JR NC,LLADEB                      
       INC Н                             
LLADEB LD A,(HL)                         
       INC HL                            
       PUSH AF                           
       LD A,(HL)                         
       CALL LLAE45                       
       РОР AF                            
       CALL LLAE45                       
       DEC Е                             
       DEC Е                             
LLADF8 INC Е                             
       INC Е                             
       LD A,#0В                          
       CALL LLAE45                       
       LD Н,#07                          
       CALL LLAE19                       
       LD A,#0D                          
       CALL LLAE45                       
       LD Н,#08                          
       CALL LLAE19                       
       LD A,#0D                          
       CALL LLAE45                       
       LD Н,#09                          
       CALL LLAE19                       
       RET                               
LLAE19 CALL LLAF2В                       
       JR LLAE32                         
LLAE1Е LD Н,#00                          
       CALL LLAF2В                       
       RRCA                              
       LD A,#0A                          
       JR NC,LLAE2С                      
LLAE28 CALL LLAE45                       
       RET                               
LLAE2С INC A                             
       JR LLAE28                         
LLAE2F INC DE                            
       INC DE                            
       RET                               
LLAE32 JR С,LLAE2F                       
       PUSH AF                           
       RRCA                              
       RRCA                              
       RRCA                              
       RRCA                              
       AND #0F                           
       CALL LLAE45                       
       РОР AF                            
       AND #0F                           
       CALL LLAE45                       
       RET                               
LLAE45 PUSH DE                           
       LD DE,LLAE63                      
       ADD A,A                           
       LD L,A                            
       ADD A,A                           
       ADD A,L                           
       LD L,A                            
       LD Н,#00                          
       ADD HL,DE                         
       РОР DE                            
       LD В,#06                          
       LD С,D                            
       XOR A                             
       LD (DE),A                         
       INC D                             
LLAE58 LD A,(HL)                         
       LD (DE),A                         
       INC HL                            
       INC D                             
       DJNZ LLAE58                       
       XOR A                             
       LD (DE),A                         
       LD D,С                            
       INC Е                             
       RET                               
LLAE63 LD A,A                            
       LD Н,Е                            
       LD Н,Е                            
       LD Н,Е                            
       LD Н,Е                            
       LD A,A                            
       JR LLAE83                         
       JR LLAE85                         
       JR LLAE87                         
       LD A,A                            
       INC ВС                            
       LD A,A                            
       LD Н,В                            
       LD Н,В                            
       LD A,A                            
       LD A,A                            
       INC ВС                            
       RRCA                              
       INC ВС                            
       INC ВС                            
       LD A,A                            
       LD Н,Е                            
       LD Н,Е                            
       LD Н,Е                            
       LD A,A                            
       INC ВС                            
       INC ВС                            
       LD A,A                            
       LD Н,В                            
LLAE83 LD A,A                            
       INC ВС                            
LLAE85 INC ВС                            
       LD A,A                            
LLAE87 LD A,A                            
       LD Н,В                            
       LD A,A                            
       LD Н,Е                            
       LD Н,Е                            
       LD A,A                            
       LD A,(HL)                         
       LD В,#06                          
       LD В,#06                          
       LD В,#7F                          
       LD Н,Е                            
       LD A,A                            
       LD Н,Е                            
       LD Н,Е                            
       LD A,A                            
       LD A,A                            
       LD Н,Е                            
       LD Н,Е                            
       LD A,A                            
       INC ВС                            
       LD A,A                            
       INC Е                             
       INC Е                             
       NOP                               
       NOP                               
       INC Е                             
       INC Е                             
       NOP                               
       NOP                               
       NOP                               
       NOP                               
       NOP                               
       NOP                               
       LD A,(HL)                         
       ADD A,С                           
       SBC A,A                           
       SUB С                             
       ADD A,С                           
       LD A,(HL)                         
       NOP                               
       NOP                               
       NOP                               
       INC Е                             
       INC Е                             
       INC Е                             
       NOP                               
       NOP                               
       LD A,(HL)                         
       LD В,D                            
       LD В,D                            
       LD В,D                            
       NOP                               
       NOP                               
LLAEBF LD В,D                            
       LD A,(HL)                         
       LD В,D                            
       LD В,D                            
       NOP                               
       NOP                               
       LD (HL),В                         
       LD A,(HL)                         
       LD В,D                            
       LD A,(HL)                         
       NOP                               
       NOP                               
       LD A,#08                          
       ЕХ AF,AF`                         
       ЕХ AF,AF`                         
       NOP                               
       NOP                               
       LD A,(HL)                         
       LD В,В                            
       LD В,В                            
       LD A,(HL)                         
       NOP                               
       NOP                               
       LD A,Н                            
       LD В,Н                            
       LD A,Н                            
       LD В,В                            
       NOP                               
       INC A                             
       LD В,В                            
       LD A,Н                            
       LD В,D                            
       LD A,Н                            
       LD (DE),A                         
       DJNZ LLAEF3                       
LLAEE3 EQU $-#01                         
       LD С,#11                          
       DJNZ LLAEFB                       
       LD (DE),A                         
       LD DE,#1104                       
       LD С,#14                          
       LD (DE),A                         
       LD (DE),A                         
       DJNZ LLAEBF                       
       INC В                             
LLAEF3 XOR A                             
       LD A,Н                            
       LD ВС,(R_ADRS)                    
       OUT (С),A                         
       LD A,L                            
LLAEFB LD ВС,(R_DATA)                    
       OUT (С),A                         
       CALL LLAFOD                       
       RET                               
LLAFOЧ LD ВС,(R_SEL)                     
       LD A,(ON)                         
       DI                                
       OUT (С),A                         
       RET                               
LLAFOD LD ВС,(R_SEL)                     
       LD A,(OFF)                        
       EI                                
       OUT (С),A                         
       RET                               
LLAF16 CALL LLAFOЧ                       
       LD A,Н                            
       LD ВС,(R_ADRS)                    
       OUT (С),A                         
       LD ВС,(R_DATA)                    
       IN A,(С)                          
       LD Н,A                            
       CALL LLAFOD                       
       LD A,Н                            
       AND A                             
       RET                               
LLAF2В CALL LLAFOЧ                       
       LD A,#0A                          
       LD ВС,(R_ADRS)                    
       OUT (С),A                         
       LD ВС,(R_DATA)                    
       IN A,(С)                          
       RLA                               
       JR С,LLAF5E                       
       CALL LLAF16                       
       LD Н,A                            
       LD A,#00                          
       AND A                             
       JR Z,LLAF5B                       
       LD A,Н                            
       LD С,#FF                          
LLAFЧ9 INC С                             
       SUB #0A                           
       JR NC,LLAFЧ9                      
       ADD A,#0A                         
       RLC С                             
       RLC С                             
       RLC С                             
       RLC С                             
       OR С                              
       AND A                             
       RET                               
LLAF5B LD A,Н                            
       AND A                             
       RET                               
LLAF5E CALL LLAFOD                       
       SCF                               
       RET                               
LLAFбЗ LD D,Н                            
       LD Е,L                            
       INC Е                             
       LD ВС,#000A                       
       LD (HL),#61    ;байт атрибутов    
       LDIR                              
       RET                               
                                         
                                         
Вот еще u резидент для часов:  
                                         
                                         
:РЕЗИДЕНТ CMOS ЧАСОВ ДЛЯ IS=DOS
                                         
       ORG #С350                         
MEMO   EQU $-1                           
       DEFW INIT                         
       DEFW #0000                        
                                         
       LD A,#FF                          
МЕМ1   EQU $                             
       LD HL,МЕМЗ                        
       LD С,#1Е                          
       RST #10                           
       RET                               
                                         
INIT   INC A                             
       RET Z                             
       INC A                             
       RET NZ                            
МЕМ2   EQU $                             
       LD HL,МЕМЗ                        
       LD С,#1Е                          
       RST #10                           
       RET                               
                                         
       DEFW #0000                        
                                         
МЕМЗ   EQU $                             
LLC36A LD A,(LLC44D)                     
       ADD A,#10                         
МЕМЧ   EQU $                             
       LD (LLC44D),A                     
       RET NC                            
       DI                                
       LD ВС,#EFF7                       
       LD A,#80                          
       OUT (С),A                         
LLC373 LD A,#0A                          
MEMS   EQU $                             
       CALL LLC444                       
       RLCA                              
       JR С,LLC373                       
       LD A,#07                          
МЕМб   EQU $                             
       CALL LLC444                       
       LD Е,A                            
       LD A,#08                          
МЕМ7   EQU $                             
       CALL LLC444                       
       AND #0F                           
       RRCA                              
       RRCA                              
       RRCA                              
       LD D,A                            
       AND #Е0                           
       OR Е                              
       LD Е,A                            
       LD A,#01                          
       AND D                             
       LD D,A                            
       LD A,#09                          
МЕМ8   EQU $                             
       CALL LLC444                       
       SLA A                             
       OR D                              
       LD D,A                            
       PUSH DE                           
       LD A,#00                          
МЕМ9   EQU $                             
       CALL LLC444                       
       RR A                              
       PUSH AF                           
       LD A,#02                          
МЕМ10  EQU $                             
       CALL LLC444                       
       LD Е,A                            
       LD D,#00                          
       PUSH DE                           
       LD A,#04                          
МЕМ11  EQU $                             
       CALL LLC444                       
       LD Е,A                            
       LD A,#02                          
       AND A                             
       PUSH AF                           
МЕМ12  EQU $                             
       LD HL,LLC44E                      
       LD ВС,#107С                       
       RST #10                           
       РОР AF                            
       РОР DE                            
МЕМ13  EQU $                             
       LD HL,LLC451                      
       RST #10                           
МЕМ14  EQU $                             
       LD HL,LLC44D                      
       LD В,#04                          
       LD A,#20                          
LLC3D4 INC HL                            
       СР (HL)                           
       JR NZ,LLC3DA                      
       LD (HL),#30                       
LLC3DA DJNZ LLC3D4                       
       DEC HL                            
       РОР AF                            
       LD A,#3A                          
       JR С,LLC3E4                       
       AND #20                           
LLC3E4 LD (HL),A                         
       LD С,#45                          
       RST #10                           
       EXX                               
       DEC HL                            
       DEC HL                            
       РОР DE                            
       LD (HL),D                         
       DEC HL                            
       LD (HL),Е                         
       LD В,#05                          
МЕМ15  EQU $                             
       LD HL,LLC44E                      
       LD DE,#401В                       
LLC3F7 PUSH ВС                           
       PUSH HL                           
       PUSH DE                           
       LD L,(HL)                         
       LD Н,#00                          
       ADD HL,HL                         
       ADD HL,HL                         
       ADD HL,HL                         
       LD ВС,#3С00                       
       ADD HL,ВС                         
       ЕХ DE,HL                          
       LD В,#08                          
       РОР HL                            
       PUSH HL                           
LLC409 PUSH ВС                           
       LD A,(DE)                         
       LD (HL),A                         
       LD ВС,#0100                       
       ADD HL,ВС                         
       INC DE                            
       РОР ВС                            
       DJNZ LLC409                       
       РОР DE                            
       РОР HL                            
       РОР ВС                            
       INC HL                            
       INC DE                            
       DJNZ LLC3F7                       
       LD ВС,#EFF7                       
       XOR A                             
       OUT (С),A                         
       EI                                
       RET                               
LLC444 LD ВС,#DFF7                       
       OUT (С),A                         
       LD В,#BF                          
       IN A,(С)                          
       RET                               
LLC44D DEFB #00                          
LLC44E DEFM "## ##"                      
LLC451 EQU $-2                           
       DEFB #FF,#FF                      
       DEFW MEMO,МЕМ1,МЕМ2,МЕМЗ          
       DEFW МЕМЧ,MEMS,МЕМб,МЕМ7          
       DEFW МЕМ8,МЕМ9,МЕМ10,МЕМ11        
       DEFW МЕМ12,МЕМ13,МЕМ14,МЕМ15      
                                         
                                         
В приложении находится установщик рези-  
дента вместе с резидентом часов.         



Другие статьи номера:

От автора - давайте познакомимся!

Программистам - Работа с CMOS часами.

Программистам - Конверсия чисел в десятичный формат.

Программистам - Индикатор работы диска.

Очумелые ручки - ROM-диск.

Очумелые ручки - Контроллер ОЗУ.

Очумелые ручки - Порт RS232.

Очумелые ручки - General sound.

Очумелые ручки - Команды CD-ROM.

Очумелые ручки - SIMM 4MB на ZX

Презентация - CMOS service v1.0

Презентация - PKUNZIP для ZX

Презентация - Perfect comander v1.7

Обозрение - ВGЕ 3.01, Glоbаl Соmаndеr 1.31, Реrfеct Соmаndеr 1.7.

Разное - Крик о помощи.

Разное - Дилерская_сеть.

Разное - Реклама.

Разное - Без непоняток.

Разное - Заключение.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Вступление - содержание газеты.
Информация - Авторы журнала
Аперативчик - О новой оболочке журнала.
Ликбез - ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04 (5.03)
Вступление - Итак, пpивет!

В этот день...   21 ноября