ZXNet эхоконференция «zxnet.soft»


тема: Hамыльте пожалуйста



от: Stanislav Yudin
кому: All
дата: 24 Aug 2002
Приветствую тебя, All !

Сабж у кого есть:

1. Драйвер часов SMUC для Лары.
2. Дикого, собранного под SMUC.

With best wishes, Stanislav Yudin.

от: Kirill Frolov
кому: Stanislav Yudin
дата: 25 Aug 2002
Hемедленно нажми на RESET, Stanislav!

24 Aug 02 22:24, Stanislav Yudin wrote to All:

SY> 1. Драйвер часов SMUC для Лары.

Кажется я писал. Теперь вижу, что и код ламерский и вообще это глюк.
Поэтому вот тебе кусок для SMUC, от драйвера ММД:


=== Cut ===

;---------------------------------------
;
;РАБОТА С ЧАСАМИ HА SMUC


OUT_C PUSH BC
PUSH HL
PUSH AF
LD A,C
LD HL,#2A53
LD BC,#DFBA ; SET REGISTER
CALL JPTRD
LD B,#FF
LD A,(MASK)
OR #80
CALL JPTRD ; WRITE ENABLE
LD B,#DF
POP AF
CALL JPTRD ; WRITE DATA
LD B,#FF
LD A,#77
MASK EQU $-1
AND #7F
CALL JPTRD ; LOCK WRITE CMOS
POP HL
POP BC
RET

IN_C PUSH BC
PUSH HL
LD A,C
PUSH AF
LD HL,#2A53
LD BC,#FFBA
LD A,(MASK)
AND #7F
CALL JPTRD
POP AF
LD B,#DF
CALL JPTRD
LD HL,#3FF3
CALL JPTRD
POP HL
POP BC
RET

JPTRD PUSH HL
JP #3D2F

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ОВИТЬ ВРЕМЯ
;[H]-[L]-[D]-[B]-[C]-[E]-[A]
;ГГ ММ ДД ЧЧ ММ СС ДЕЬ_ЕДЕЛИ

D_SET_TIME PUSH AF
PUSH BC

LD BC,1000
D_SET1 PUSH BC
LD C,#0A
CALL IN_C
RLCA
POP BC
JR NC,D_SET2
DEC BC
LD A,B
OR C
JR NZ,D_SET1

D_SET2 LD C,#0B
CALL IN_C
AND %01111001
OR %10000110 ; 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 XOR A
LD (ANTIGLUK),A

LD BC,10000
D_RDT1 PUSH BC
LD C,#0A
CALL IN_C
RLCA
POP BC
JR NC,D_RDT2
DEC BC
LD A,B
OR C
JR NZ,D_RDT1
SCF
RET

D_RDT2 LD C,#0B
CALL IN_C
AND %00100101
OR %00000110 ; BIN 24
CALL OUT_C

LD C,#08
CALL IN_C
; CALL BCD_BIN
LD L,A
LD C,#09
CALL IN_C
; CALL BCD_BIN
LD H,A

LD C,#02
CALL IN_C
; CALL BCD_BIN
LD E,A
LD C,#04
CALL IN_C
; CALL BCD_BIN
LD D,A
PUSH DE

LD C,#00
CALL IN_C
; CALL BCD_BIN
LD E,A
LD C,#07
CALL IN_C
; CALL BCD_BIN
LD D,A

LD C,#06
CALL IN_C
; CALL BCD_BIN

POP BC
OR A
RET

;---------------------------

;ДОБАВИТЬ К ТАЙМЕРУ [A] ЕДЕHИЦ
D_ADD_ALR PUSH AF
CALL #C036
LD C,A
POP AF
ADD A,C
JP NC,#C030
LD A,255
JP #C030
;---------------------------

;УСТАHОВИТЬ ТАЙМЕР А [A] ЕДЕHИЦ
D_SET_ALR

PUSH AF

LD BC,10000
D_SALRM1 PUSH BC
LD C,#0A
CALL IN_C
RLCA
POP BC
JR NC,D_SALRM2
DEC BC
LD A,B
OR C
JR NZ,D_SALRM1
POP AF
SCF
RET

D_SALRM2
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] - СКОЛЬКО ЕДИHИЦ ОСТАЛОСЬ

LD BC,10000
D_RD_ALR PUSH BC
LD C,#0A
CALL IN_C
RLCA
POP BC
JR NC,D_RD_ALR1
DEC BC
LD A,B
OR C
JR NZ,D_RD_ALR
RET

D_RD_ALR1
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


; А ЭТО СИСТЕМА "АHТИГЛЮК", ТО ЕСТЬ
; WATCH-DOG ТАЙМЕР -- СБРАСЫВАЕТ ПРИ ЗАВИСАHИИ
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 %00100101
OR %00100110 ; BIN 24 ALARM
JP OUT_C

ANTIGLUK_OFF LD C,#0B
CALL IN_C
AND %00000101
OR %00000110
CALL OUT_C
LD C,#0C
CALL IN_C
LD C,#D
JP IN_C

=== Cut ===


Драйвер для глюка:

=== Cut ===

;Hачиная с версии 3.8 есть поддержка драйвера для Cmos часов.
;Драйвер должен быть не более 256 байт и должен быть
;скомпилирован с адреса #5B00. У драйвера есть три точки входа:

;#5B00 - инициализация часов + загрузка времени в буфер,
; адресованный регуистровой парой HL
;#5B02 - запись времени из буфера (HL) в часы. Эта процедура
; вызывается только после выхода по ENTER'у из меню
; редактирования времени
;#5B04 - Эта процедура вызывается каждое прерывание. Она должна
; обновлять время в буфере по адресу HL. а выходе
; процедура должна выставлять флаг NC для того, чтобы
; произошла перерисовка времени (C - не перерисовывать на
; этом прерывании). Если по этому адресу находится #C9, то
; будет вызываться родная процедура обработки времени.

;Формат буфера времени (HL) :

;год,месяц,число,час,минута,секунда

;а каждое поле отводится по два байта.
;Год должен быть реальным (1999,2000 и т.д., а не 98,99)
;Месяц должен быть от 1 до 12
;Число должно быть от 1 до 31 (30,29,28)

;Драйвер должен быть на диске, с которого грузится редактор и
;должен иметь имя CmosDrv.C


; make "CmosDrv",#5b00

jr cmos2buf
jr buf2cmos

ld d,#0c
call read
and %00010000
scf
ret z

cmos2buf call wrdy
ld d,#09 ; year
call readl
ld e,#6c ; 1900=#076c
cp 99 ; 2000=#07d0
jr nc,year1
ld e,#d0
year1 add a,e
ld (hl),a
inc hl
ld a,#07
adc a,0
ld (hl),a
inc hl
ld e,0
dec d ; month
call readhl
dec d ; day
call readhl
ld d,4 ; hour
call readhl
ld d,2 ; min
call readhl
ld d,e ; sec
call readhl
xor a
ret

readhl call readl
ld (hl),a
inc hl
ld (hl),e
inc hl
ret

readl call read
read_o nop ; bcd->bin ?
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
ret

buf2cmos call wrdy
ld d,#0b
call read
or #80
call write ; stop time
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ex de,hl
ld bc,100
or a
year2 sbc hl,bc
jr nc,year2
add hl,bc
ex de,hl
ld d,#09
ld a,e
call writel ; year
dec d
call writehl ; month
dec d
call writehl ; day
ld d,#04
call writehl ; hour
ld d,#02
call writehl ; min
ld d,0
call writehl ; sec
ld d,#0b
call read
and #7f
call write ; start time
xor a
ret

writehl ld a,(hl)
inc hl
inc hl

writel call bin2bcd
write ld bc,#dff7
out (c),d
ld b,#bf
out (c),a
ret

bin2bcd nop ; lock
write_o equ $-1
ld b,10
ld c,#ff
div10 sub b
inc c
jr nc,div10
add a,b
ld b,a
ld a,c
add a,a
add a,a
add a,a
add a,a
or b
ret

read ld bc,#dff7
out (c),d
ld b,#bf
in a,(c)
ret

wrdy ld d,#0a
wrdy1 call read
rla
jr c,wrdy1
inc d
call read
and %00000100
jr z,wrdy2
ld a,#c9
wrdy2 ld (read_o),a
ld (write_o),a
ret

=== Cut ===

SY> 2. Дикого, собранного под SMUC.

Такого не бывает. Дело в том, что Dickie всегда используется один,
но ставятся разные версии DosX под разную аппаратуру. Тебе нужен DosX
под SMUC.

У тебя наверняка есть писюк (IBM-PC) -- можешь взять исходники
и пересобрать себе какую хочешь версию. Для сборки нуженy MOA-шные
ассемблер ma80 и линкер mlink. Говори е-мыло -- замылю сырцы и ассемблер.
Только у меня версия может устаревшая уже, 1.0 вроде, 1999 года.

от: Valerij Kozhevnikoff
кому: Stanislav Yudin
дата: 27 Aug 2002
Здравствуй, Stanislav!

24 Авг 02 22:24, Stanislav Yudin -> All:

SY> 1. Драйвер часов SMUC для Лары.

Этот через RST 8, ибо давно написан. Hо работает.

section 1 of file cmosdrv.$c < uuencoded by Necromancer's Dos Navigator >

begin 644 cmosdrv.$c
M0VUO MB3@L(=`'%@`9T>NO MKGAR5XC(T8C(TXC(^46H<^)```X[.%>(R-&(R-.(R/E%J#/B3C;X M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
#````
`
end
sum -r/size 34156/405 section (from "begin" to "end")
sum -r/size 63193/273 entire input file

WBR, Jason.

/*e-mail: jason2000(собака страшная)yandex.ru ICQ: 62235830*/

/np:/ *silence*




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

Похожие статьи:
MilleniuM - Партийные размышления: успехи и неудачи виртуального конкурса.
Интервью - RAIDEN о себе и о своей газете TIME.
Реклама - реклама и объявления.
PROJECT - О создании игрового проекта DUNE.
Система - Описание программ: КРАТКОЕ ОПИСАНИЕ КОМАНД Y-COMMANDER.

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