PROGRAMMING CMOS on K512VI1 (watch processing procedures) Pantera _________________________________________ Yes, everyone is shouting around this Cmos clock rules, cool. Now, if only someone would- How to code for them. I have this watch for myself. I collected it a long time ago and now I’ve decided, since no one wants to share with the people about me- in programming methods, this means destined :-) to do to me. The clock is accessed through control register #EFF7 with mask #80 on and #00 off mask. The clock also has two transfer registers: Address register #DFF7 that orders the desired memory cell in Cmos. This register works only for recording. Data register#BFF7 through which the Cmos values are being written/read. LD BC,#DFF7 LD Н,#11 ;open the cell OUT (C),H ;#11 LD Sun,#BFF7 LD L,#AA ;write to this OUT (C),L ;cell #AA RET ;to read from a cell LD BC,#BFF7 IN A, (C); read from port SR #AA ; cmos presence byte RET Z RET Well, here is the body of the program: ;PROCESSING HARDWARE CMOS CLOCK ;WRITEN VU (C)Pantera 2001 ;V2.1 ;INSTALLING THE REGISTERS OF THE CHIP ;V N,ADDRESS IN L,VALUE;Cells in which values are entered: ;#00-SECONDS ;#02-MINUTES ;#04-CLOCK ;#06-DAY OF THE WEEK ;#07-NUMBER ;#08-MONTH ;#09-YEAR ;Now about the cmos control bytes, which ;are entered into cells #11,#0A,#0B before operation ;botoy cmos. ;#11-#AA CLOCK PRESENCE BYTE. MANDATORY!! ; USED TO DETECT CHA- ; OWL IN THE SYSTEM, PROGRAMS. ;#0А-32 IT IS MANDATORY TO ENTER THIS VALUE ;#0В-2 IT IS MANDATORY TO ENTER THIS VALUE ORG #8000 JP SNESK ;--------------------------------------- R_SEL DEFW #EFF7 ;CONTROL REGISTER R_DATA DEFW #BFF7 ;DATA REGISTERR_ADRS DEFW #DFF7 ;ADDRESS REGISTER ON DEFB #80 ;ON MASK OFF DEFB #00 ;SHUTDOWN MASK ;--------------------------------------- ;-------CHECKING THE PRESENCE OF CMOS------------ SNESK CALL OPEN; OPEN CMOS LD N,#11 ;WRITE IN CELL #11 LD AF,(R_ADRS) OUT (C),H LD L,#AA ;#AA IN CELL #11 LD BC,(R_DATA) ; FOR CHECKING OUT (C),L ;PRESENCE OF MICRUCH ;---------PROCEDURE FOR READING FROM THE PORT------ LD Н,#11 ;OPEN THE CELL LD BC,(R_ADRS) WRITE THE VALUE- OUT (C),H ;NIE IN REG. ADDRESSES LD BC,(R_DATA) ;READ FROM REGISTER IN A,(C) ;DATA NUMBER #AA SR #AA ; COMPARE PUSH AF CALL CLOSE POP AF JR Z,CMOS RET ;NO CLOCK CMOS CALL OPENLD HL,#0A20 ;TO CELL #0A NEEDED CALL W_CMOS ;ENTER #20!!! LD HL,#0В02 ;TO CELL #0В NEEDED CALL W_CMOS ;ENTER #02!!! CALL CLOSE LD A,7 ;IF THERE IS A CLOCK THEN OUT (#FE),A ;BORDER WILL BE WHITE RET ;---PROCEDURE FOR OPENING ACCESS TO CMOS---- OPEN LD BC, (R_SEL) ;OPEN CMOS LD A,(ON) ;SET BIT 7 OUT (C),A ; RET ;---PROCEDURE FOR CLOSURE ACCESS TO CMOS--- CLOSE LD A,(OFF) ;ALL CUTS OUT LD BC,(R_SEL) OUT (C),A RET ;---SUBROUTINE FOR STORE VALUES INTO CMOS CLOCK------------- ;ENTER VIA REGUCTP HL, V H-CELL, V L-VALUE W_CMOS LD AF,(R_ADRS) OUT (C),HLD BC,(R_DATA) OUT (C),L RET This is the clock ticking procedure: ;sources taken from the program Mg.Gluk Reset Service 5.3k : DISPLAY TIME AND DATE ON SCREEN M1 CALL CMOS_R JP M1 CMOS_R EXX CALL CMOS_3 LD HL,10072 EXX RET CMOS_3 LD HL,#5815 CALL LLAFbZ LD DE,#4015 LD N,#0V CALL LLAF2В BIT 5.A JR Z,LLADB9 LD A,#0С CALL LLAE45LD 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 AJR LLAE28 LLAE2F INC INC DE RET LLAE32 JR С,LLAE2F PUSH AF RRCA RRCA RRCA RRCA AND #0F CALL CALL4 РОР AF AND #0F CALL CALL4 RET LLAE45 PUSH OF LD OF,LLAE6 ADD A,A LD L,A ADD A,A ADD A,L LD L,A LD Н,#0 ADD HL,DE РОР OF LD В,#0 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),ADJNZ LLAEF3 LLAEE3 EQU $-#01 LD C,#11 DJNZ LLAEFB LD (DE),A LD DE,#1104 LD C,#14 LD (DE),A LD (DE),A DJNZ LLAEBF INC B LLAEF3 XOR A LD A,H LD VS,(R_ADRS) OUT (C),A LD A,L LLAEFB LD VS,(R_DATA) OUT (C),A CALL LLAFOD RET LLAFOCH LD VS,(R_SEL) LD A,(ON) DI DI. OUT (C),A RET LLAFOD LD VS,(R_SEL) LD A,(OFF) EI OUT (C),A RET LLAF16 CALL LLAFOÇ LD A,H LD VS,(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,H AND A RET LLAF5E CALL LLAFOD SCF RET LLAFbЗ LD D,Н LD E,L INC E LD Sun,#000A LD (HL),#61 ;attribute byte LDIR RET Here is another u resident for the clock: :RESIDENT CMOS CLOCK FOR IS=DOS ORG #С350 MEMO EQU $-1 DEFW INIT DEFW #0000 LD A,#FF MEM1 EQU $ LD HL,MEMZ LD C,#1ERST #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 Е,ALD 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),ALD С,#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 ROR VS DJNZ LLC409 ROR DE ROR HL ROR VS INC HL INC DE DJNZ LLC3F7 LD VS,#EFF7 XOR A OUT (C),A EI RET LLC444 LD VS,#DFF7 OUT (C),A LD V,#BF IN A,(C) RET LLC44D DEFB #00 LLC44E DEFM "## ##" LLC451 EQ $-2 DEFB #FF,#FF DEFW MEMO,MEM1,MEM2,MEMZ DEFW MEMCH,MEMS,MEMB,MEM7 DEFW MEM8,MEM9,MEM10,MEM11 DEFW MEM12,MEM13,MEM14,MEM15 The application contains a resi- dent along with the resident clock.
Share your thoughts about the article