gluck cmos ports...
ZXNet echo conference «hardware.zx»
From Kirill Frolov → To Konstantin Lebedev 21 September 2001
Press RESET immediately, Konstantin!
19 Sep 01 18:32, Konstantin Lebedev wrote to All:
KL> Here you need to assign one friend the request for watch ports
KL> glitch for the modem driver for MMD (4.48). He wants to open bbs.
KL> So, due to the lack of information about ports, I ask you to throw them here
KL> addresses. Thanks in advance.
From my (I don’t know how old) driver, apparently for
one of the MMD version 4.xx. I don't know how well it will work
with the MMD that we have now - initialization and anti-glitch changed every time...
It is possible that it only supports clocks in which time is stored
in BCD (packed binary decimal) format. Access blocking
to the CMOS chip via port EFF7 _HE_ _USES_ !!!
Assembled using assembler ZXASM3.0. I can give you the whole driver.
=== Cut ===
;---------------------------------------
;
;WORKING WITH THE CLOCK WITHOUT #EFF7
;
OUT_C PUSH BC
PUSH AF
LD A,C
LD BC,#DFF7
OUT(C),A
POP AF
LD B,#BF
OUT(C),A
POP B.C.
RET
IN_C PUSH BC
LD A,C
LD BC,#DFF7
OUT(C),A
LD B,#BF
IN A,(C)
POP B.C.
RET
BCD_BIN PUSH BC : LD B,A
AND #F0 : RRCA
LD C,A
RRCA: RRCA
ADD A,C : LD C,ALD A,B : AND #0F
ADD A,C
POP BC : RET
BIN_BCD PUSH BC : LD BC,#FF0A
INC B : SUB C : JR NC,$-2
ADD A,C : LD C,A
LD A,B : RLCA : RLCA : RLCA
RLCA : OR C : POP BC : RET
;***********************************
;УСТАОВИТЬ ВРЕМЯ
;[H]-[L]-[D]-[B]-[C]-[E]-[A]
;ГГ ММ ДД ЧЧ ММ СС ДЕЬ_ЕДЕЛИ
D_SET_TIME PUSH AF
PUSH BC
D_SET1 LD C,#0A : CALL IN_C
RLCA : JR C,D_SET1
LD C,#0B : CALL IN_C
AND %01111001
OR %10000010 ; BIN 24 SET MODE
CALL OUT_C
LD C,#0D: CALL IN_C
LD C,#0C: CALL IN_C
LD A,E : CALL BIN_BCD : LD C,#00 : CALL OUT_C
LD A,D : CALL BIN_BCD : LD C,#07 : CALL OUT_C
POP DE
LD A,E : CALL BIN_BCD : LD C,#02 : CALL OUT_C
LD A,D : CALL BIN_BCD : LD C,#04 : CALL OUT_C
LD A,L : CALL BIN_BCD : LD C,#08 : CALL OUT_C
LD A,H : CALL BIN_BCD : LD C,#09 : CALL OUT_C
POP AF
LD C,#06 : AND 7 : CALL OUT_C
LD C,#0B : CALL IN_C
AND %01111001
OR %00000010 : CALL OUT_C
XOR A : RET
;---------------------------
;СЧИТАТЬ ВРЕМЯ
;[H]-[L]-[D]-[B]-[C]-[E]-[A]
;ГГ ММ ДД ЧЧ ММ СС ДЕЬ_ЕДЕЛИ
D_RD_TIME CALL ANTIGLUK_ON
D_RDT1 CALL R512WI1
LD C,#0B : CALL IN_C
AND %00100001
OR %00000010 ; BIN 24
CALL OUT_C
CALL R512WI1LD C,#08 : CALL IN_C : CALL BCD_BIN : LD L,A
CALL R512WI1
LD C,#09 : CALL IN_C : CALL BCD_BIN : LD H,A
CALL R512WI1
LD C,#02 : CALL IN_C : CALL BCD_BIN : LD E,A
CALL R512WI1
LD C,#04 : CALL IN_C : CALL BCD_BIN : LD D,A
PUSH DE
CALL R512WI1
LD C,#00 : CALL IN_C : CALL BCD_BIN : LD E,A
CALL R512WI1
LD C,#07 : CALL IN_C : CALL BCD_BIN : LD D,A
CALL R512WI1
LD C,#06 : CALL IN_C : CALL BCD_BIN
POP BC: OR A: RET
R512WI1 LD C,#0A : CALL IN_C
RLCA : JR C,R512WI1
RET
;---------------------------
ДОБАВИТЬ К ТАЙМЕРУ [A] ЕДЕИЦ
D_ADD_ALR PUSH AF
CALL #C036
LD C,A : POP AF : ADD A,C
JP NC,#C030
LD A,255
JP #C030
;---------------------------
УСТАОВИТЬ ТАЙМЕР А [A] ЕДЕИЦ
D_SET_ALR
PUSH AF
D_SALRM1 LD C,#0A : CALL IN_C
RLCA : JR C,D_SALRM1
LD C,#02 : CALL IN_C
CALL BCD_BIN : LD L,A ;МИ
POP AF
LD C,A : LD B,0 : LD H,B
ADD HL,BC
LD C,#04 : CALL IN_C ;ЧАСЫ
CALL BCD_BIN
LD BC,60
STT OR A : SBC HL,BC: JR C,STT1
INC A : JR STT
STT1 ADD HL,BC: LD H,A
LD (DTFREE),HL
LD C,#07: CALL IN_C ;ДЕЬ
CALL BCD_BIN
LD (TDAY),A
LD A,1: LD (FLAG),A
RET
;*************************************
ЕСЛИ ВРЕМЯ ИСТЕКЛО, CY=1;[A] - СКОЛЬКО ЕДИИЦ ОСТАЛОСЬ
D_RD_ALR LD C,#0A : CALL IN_C
RLCA : JR C,D_RD_ALR
FLAG EQU $+1 : LD A,0
OR A : SCF : RET Z
LD C,#07 : CALL IN_C ;ДЕЬ
CALL BCD_BIN
TDAY EQU $+1 : CP 0
LD D,0 : JR Z,$+4 : LD D,24
LD C,#02 : CALL IN_C ;МИ
CALL BCD_BIN
LD E,A
LD C,#04 : CALL IN_C ;ЧАСЫ
CALL BCD_BIN
ADD A,D : LD D,A
DTFREE EQU $+1 : LD HL,0
LD A,L : CP E : JR NC,WFREE1
ADD A,60 : DEC H
WFREE1 SUB E : LD E,A
LD A,H : SUB D : LD D,A
JR C,NO_TIME
LD B,60 : XOR A
WFT1 ADD A,D : JR C,WFTER
DJNZ WFT1
ADD A,E : JR NC,WFT2
WFTER LD A,255
WFT2 OR A : RET NZ
NO_TIME XOR A : LD (FLAG),A
SCF
D_RET RET
ANTIGLUK RET
ANTIGL0 LD C,#0A : CALL IN_C
RLCA : JR C,ANTIGL0
LD C,#02 : CALL IN_C : LD E,A
LD C,#04 : CALL IN_C : LD D,A
LD A,3 : ADD A,E : DAA : LD E,A
CP #60 : JR C,ANTIGL1
SUB #60 : DAA : LD E,A
LD A,D : ADD A,1 : DAA : LD D,A
CP #24 : JR C,ANTIGL1
SUB #24 : DAA : LD D,A
ANTIGL1 LD A,#FF : LD C,#01 : CALL OUT_C
LD A,E : LD C,#03 : CALL OUT_C
LD A,D : LD C,#05 : CALL OUT_C
LD C,#0B : CALL IN_C
AND %00100001
OR %00100010 ; BIN 24 ALARM
JP OUT_C
ANTIGLUK_ON CALL ANTIGLUK_OFF
XOR A LD (ANTIGLUK),A
LD A,#C9
LD (ANTIGLUK_ON),A
JP ANTIGLUK
ANTIGLUK_OFF LD C,#0B : CALL IN_C
AND %00000001
OR %00000010
CALL OUT_C
LD C,#0C
CALL IN_C
LD C,#0D
JP IN_C
=== Cut ===