ZXNet эхоконференция «hardware.zx»
тема: gluck cmos ports...
от: Kirill Frolov
кому: Konstantin Lebedev
дата: 21 Sep 2001
Hемедленно нажми на RESET, Konstantin!
19 Sep 01 18:32, Konstantin Lebedev wrote to All:
KL> Вот надо одному товарищу приписать отпрос портов часиков по
KL> глюку для драйвера модема для ММДы (4.48). Он ббс хоц открыть.
KL> Дык за неимением у меня инфы о портах, прошу сюда кинуть их
KL> адреса. Заранее благодарен.
Из моего (не знаю насколько старого) драйвера, судя по всему для
одной из MMD версии 4.xx. Hе знаю насколько он хорошо будет работать
с той ММДой которая сейчас -- инициализация и антиглюк менялись каждый раз...
Вполне возможно, что поддерживает только часы, в которых время хранится
в BCD (упакованный двоично-десятичный) формате. Блокировку доступа
к микросхеме CMOS через порт ЕFF7 _HЕ_ _ИСПОЛЬЗУЕТ_ !!!
Собирается ассемблером ZXASM3.0. Могу дать целый драйвер.
=== Cut ===
;---------------------------------------
;
;РАБОТА С ЧАСАМИ А ГЛЮКЕ БЕЗ #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 BC
RET
IN_C PUSH BC
LD A,C
LD BC,#DFF7
OUT (C),A
LD B,#BF
IN A,(C)
POP BC
RET
BCD_BIN PUSH BC : LD B,A
AND #F0 : RRCA
LD C,A
RRCA : RRCA
ADD A,C : LD C,A
LD 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 R512WI1
LD 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 ===
|