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