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




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Тема - Swap: "От письма до бандероли" как найти в своем городе Спектрумистов.
Железо - Микропроцессоры Zilog: Z80, 80,Z8000,Z80000.
Игры - описание новой игры "JAZZY RABBIT".
TOP 13 - Лучшая тринашка игр.
Письма - Дoвoльнo интеpеснoе письмo пpишлo oт Wrecker'a (SHG).

В этот день...   25 апреля