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 ===