я так понял, что вся работа с часами идет через драйвер timer2.drv. он находится в USER15.
- - - Добавлено - - -
а в описании наоборот... https://zx-pk.ru/threads/609-zx_mult...l=1#post985757
надо будет исправить, если всё подтвердится.
я так понял, что вся работа с часами идет через драйвер timer2.drv. он находится в USER15.
- - - Добавлено - - -
а в описании наоборот... https://zx-pk.ru/threads/609-zx_mult...l=1#post985757
надо будет исправить, если всё подтвердится.
Profi must live!
Моё железо...
1. Profi 5.06/1Mb(DRAM)+Profi5.06(UP)/HDD/3`5FDD/CF512Mb/SD-CARD
3. Profi 6.2 Rev. B/1Mb/3`5FDD/HDD3.2Gb
4. Profi 5.05(down)/1Mb+Profi 5.03(UP)/Pentagon_Fix
Все укомплектованы:
Profi_ZX-BUS/ZXMC2/NemoIDE/SounDrive[свернуть]
Ссылка на Telegram-канал поддержки пользователей Profi.
Это не поможет?
Код:IF1 .PRINTX . . .PRINTX . T i m e Utilities ; Micco Software (c) 1992. .PRINTX . . .PRINTX . Познянский Михаил Борисович tel: 365-09-83 . ENDIF .8080 DRCOMP SET 1 .Z80 ;============================================== ; В этой программе устанавливается и выводится ; ТЕКУЩЕЕ ВРЕМЯ !!! Special version for CONCURENT ;============================================== BIOS INCLUDE BIOS.H ; INCLUDE DSPK.H ; INCLUDE DRIVER.H ; INCLUDE DEVICE.H ; main: di ld bc,0a00h+27h call writreg ld b,0ah call readreg res 7,a cp 27h EI jp z,mnn1 XOR A LD (NOTIMER),A LD C,9 LD DE,NTTSTR CALL 5 mnn1: ld a,(82h) cp 48 jp C,pech cp 58 jp NC,pech ld bc,9 ld hl,82h ld de,string ldir ld hl,string ld b,(hl) inc hl ld c,(hl) call rdstr cp 3 jp z,pech ld a,b cp 24 jp NC,pech ld (hour),a inc hl ld b,(hl) inc hl ld c,(hl) call rdstr cp 3 jp z,pech ld a,b cp 60 jp NC,pech ld (min),a inc hl ld b,(hl) inc hl ld c,(hl) call rdstr cp 3 jp nz,sss1 ld b,0 sss1: ld a,b cp 60 jp NC,pech ld (sec),a ;===== анализ ком. строки закончен.Теперь уст. времени ;ЗДЕСЬ ЗАПИСЬ В ЯЧЕЙКИ BIOS ВРЕМЕНИ LD C,TIME CALL GETADR INC HL LD DE,SEC LD A,(DE) LD (HL),A INC HL DEC DE LD A,(DE) LD (HL),A INC HL DEC DE LD A,(DE) LD (HL),A LD A,(NOTIMER) AND A JP Z,PECH ld hl,hour ld b,(hl) inc hl ld c,(hl) inc hl ld d,(hl) call settim pech: LD A,(NOTIMER) AND A JP Z,PPP1 di ld b,0dh call readreg ei bit 7,a jp nz,ppp1 ld de,sboi ld c,9 call 5 ppp1: ;ЗДЕСЬ ЧТЕНИЕ ИЗ ЯЧЕЕК BIOS ВРЕМЕНИ LD C,TIME CALL GETADR INC HL LD DE,SEC LD A,(HL) LD (DE),A INC HL DEC DE LD A,(HL) LD (DE),A INC HL DEC DE LD A,(HL) LD (DE),A ld c,9 ld de,str1 call 5 ld a,(hour) call calc ld e,':' ld c,2 call 5 ld a,(min) call calc ld e,':' ld c,2 call 5 ld a,(sec) call calc ;=============ALARM JP END di ld b,0bh call readreg bit 5,a ei jp z,aloff ld de,str3 ld c,9 call 5 ld a,(bhour) call calc ld e,':' ld c,2 call 5 ld a,(bmin) call calc ld e,':' ld c,2 call 5 ld a,(bsec) call calc jp end aloff: ld c,9 ld de,str4 call 5 end: ld c,9 ld de,str2 call 5 jp 0 ;========================== ; УСТАНОВКА ВРЕМЕНИ ;ПАРАМЕТРЫ: ; b - часы ; c - минуты ; d - секунды ;========================== settim:di push de push bc ld bc,0a00h+27h call writreg ld bc,0b00h+80h+2h+4h+8h call writreg pop bc ld a,b push bc ld b,4 ld c,a call writreg pop bc ld b,2 call writreg pop de ld b,0 ld c,d call writreg ld b,0bh call readreg and 127 ld c,a ld b,0bh call writreg ld b,0dh call readreg ei ret ;================== rdstr: ld a,c cp 48 jp m,rds1 cp 58 jp p,rds1 inc hl sub 48 ld e,a ld a,b cp 48 jp m,rds2 cp 58 jp p,rds2 cp 48 jp z,rds3 sub 48 ld b,a XOR A rds4: add a,10 djnz rds4 add a,e ld e,a rds3: ld b,e XOR A ret rds1: ld a,b cp 48 jp m,rds2 cp 58 jp p,rds2 sub 48 ld b,a XOR A ret rds2: ld a,3 ld b,0 ret ;================== CALC: OUTDEC: OR A JR Z,OD0 LD B,A XOR A OD1:INC A DAA DJNZ OD1 OD0:LD B,A RRCA RRCA RRCA RRCA AND 00001111B JR NZ,OD2 xor a OD2:CALL OUTFIG LD A,B AND 00001111B OUTFIG: ADD A,'0' LD C,A PUSH BC .OUTCHAR POP BC RET ;================== readtime: di ld b,0ah call readreg rla jp c,readtime ld b,0 call readreg ld (sec),a ld b,1 call readreg ld (bsec),a ld b,2 call readreg ld (min),a ld b,3 call readreg ld (bmin),a ld b,4 call readreg ld (hour),a ld b,5 call readreg ld (bhour),a ei ret ;================== writreg: ld d,b ld e,c ld bc,0ffffh out (c),d ld bc,0ffefh out (c),e ret ;================ readreg: ld d,b ld bc,0ffffh out (c),d ld bc,0ffefh in a,(c) ret ;================== hour: db 0 min: db 0 sec: db 0 bhour: db 0 bmin: db 0 bsec: db 0 NOTIMER: DB 1 NTTSTR: DB 0DH,0AH,1BH,']' DB ' Плата таймера отсутствует !!!' DB 0DH,0AH,24H str1: db 0dh,0ah,1BH,']' db ' Текущее время: ' db 24h str3: db 0dh,0ah,0ah db ' Будильник : ' db 24h str4: db 0dh,0ah,0ah db ' Будильник выключен !!!' db 24h str2: db 0dh,0ah,0ah db ' Micco Software (c) Oct-1992' db 0dh,0ah,24h sboi: db 0dh,0ah,1BH,']' db ' Информация в таймере не достоверна!!!' db 0dh,0ah,24h string: ds 9 ;======================================================== endКод:;╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞╞ ;²²²² Отображение времени ²²²² ;╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛╛ INCLUDE DEVICE.H ; INCLUDE DRIVER.H ; INCLUDE BIOS.H ; INCLUDE DSPK.H ; INCLUDE CHARS.H ; DRCOMP EQU 0 OUTCHAR MACRO CHR PUSH DE .OUTCHAR CHR POP DE ENDM ASEG ORG 100H .Z80 .PHASE DRVEXEC ;²²²²²²²²²²²²²²²²²²²²²²²²²²²²²² LD HL,DRV LD C,INTRSEC CALL DRVINSTALL RET INCLUDE DRIVER.INC DRV: .DEPHASE ;²²²²²²²²²²²²²²²²²²²²²²²²²²²²²² .PHASE TIMLOC JP IR0 JP IR0 JP IR0 DB 10,12 DW TIMLOC,LSTCMRS DB 2 IR0: .SAVEDSP BUFFER LD C,TIME CALL GETADR INC HL INC HL INC HL EX DE,HL CALL PRINT DB ESC,'Y',20H,20H+55 ; position DB ESC,'l' ; color off DB ESC,']' ; koi8 DB ESC,'d',2 DB ' ',EOT CALL OUTDEC ; hour OUTCHAR ':' CALL OUTDEC ; min OUTCHAR ':' CALL OUTDEC ; sec .LOADDSP BUFFER RET OUTDEC: LD A,(DE) DEC DE OR A JR Z,OD0 LD B,A XOR A OD1: INC A DAA DJNZ OD1 OD0: LD B,A RRCA RRCA RRCA RRCA AND 00001111B JR NZ,OD2 XOR A OD2: CALL OUTFIG LD A,B AND 00001111B OUTFIG: ADD A,'0' LD C,A PUSH BC OUTCHAR POP BC RET .PRINT BUFFER: ;²²²²²²²²²²²²²²²²²²²²²²²²²²²²²² .DEPHASE END
Последний раз редактировалось tae1980; 14.11.2018 в 10:02.
Немного оффтопа:
Что за микросхемачасовреального времени?
Да поможет, но и в конец запутает.
Согласно этой информации адреса портов:
Регистр адреса RTC = 0xFFFF (не 0xFF)
Регистр данных RTC = 0xFFEF (не 0xDF)
Желательно бы еще и исходник драйвера RTC.
Часы же работают, значит в нем адресация верная, а вот в программе TESTIMER.COM адреса не такие, поэтому она и не работает.
Надо бы раз и навсегда выяснить где правильная информация.
Лучше всего это сделать по реальной, рабочей схеме подключения RTC.
Последний раз редактировалось caro; 14.11.2018 в 11:13.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Адреса портов, как и указано в доках
TREG equ 0BFh
TDAT equ 0DFh
т.е. порт данных DF, порт выбора регистра BF. Проверено на реале 100500 раз. На старые системы для Профи не ориентируйтесь. Часы там бесполезны (нахрена они вообще добавляли часы если кроме как в утилите которая показывала время они нигде более не использовались). В PQDOS часы нужны, они поддержаны на уровне ROM-BIOS и драйвера, а так же ДОС. Файлы получают дату время при модификации.
старший байт адреса порта не важен! xxBF xxDF
Скрытый текст
Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
ZX Evolution Rev B.
Color 48 + Beta Disk Interface +FDD+YM2149F
Орель-08БК
Pentagon-48 (недоссобранный кем-то)
Pentagon-128 (полуубитый)
Кворум-128 (в ремонте)
Магик-05 (в ремонте)
Robotron 1715
Корвет ПК8020 и ПК8010
Amstrad CPC 464
Amstrad CPC 6128[свернуть]
Дешифратор зашит в ППЗУ 556РТ4 так просто по схеме не разобраться, в режиме SINCLAR RTC доступен по портам:
"AS" номер регистра /w BF
"DS" данные (bas=0) DF
Обращение к ВГ93 Beta Disk Interface по стандартным портам , при установке бита D5=1 порта #DFFD (сигнал CP/M Режим PROFI ) отключает ПЗУ TRDOS и включает порты BDI на доступ из ОЗУ и ещё при установке бита D4=1 порта #7FFD ( сигнал ROM14=1) модифицирует доступ к расширенной периферии порты BDI и другая периферия работает по новым портам.
Чтобы исключить конфликт RTC и BDI по порту системный регистр (RQ93) в режиме CP/M RTC доступен по другим портам:
"AS" номер регистра /w FF
"DS" данные (bas=0) 9F
P.S.
Постоянна у меня путаница с портами RTC , в документе режиме SINCLAR оправлю
Скрытый текст
Profi v5.03/1024k/палитра/FDD3,5""/FDD5,25"/HDD/XT-Keyb/Covox
Pentagon-1024 sl v 1.4 upgrade #EFF7 Gluk RTC
ZXM-Phoenix 1024k
ATM Turbo 2+ v7.10 512k
HIMAC HR42.04 48K
HIMAC 128
Ленинград 1[свернуть]
Конечно, я уже давал его раза 2, но ещё раз дам.
;────────────────� ��──────────────── ───────
;────────────────� ��──────────────── ───────
; RTC Physical functions
;────────────────� ��──────────────── ───────
;────────────────� ��──────────────── ───────
RTCReg equ 0BFh
RTCDat equ 0DFh
RTCinit:
call RTC_timer ;ожидаем доступ к RTC
; ret c ;микросхема 512ВИ1 отсутствует
ld bc,0A27h
call Wr.RTC ;r.0A=27h
;Далее проверяем, нарушалось ли питание микросхемы.
;Т.е. корректны ли дата/время?
xor a ;read seconds
call Rd.RTC
cp 60 ;sec>=60? (0..59 vaild)
jr nc,POWbad;yes! time invalid!
ld a,2 ;r.minutes
call Rd.RTC
cp 60
jr nc,POWbad
ld a,4
call Rd.RTC
cp 24
jr nc,POWbad
ld a,7
call Rd.RTC
cp 32
jr nc,POWbad
ld a,8 ;месяц
call Rd.RTC
cp 13 ;CF=1 if ok
ccf
ld a,0 ;питание не нарушалось, дата/время корректны
ret nc
POWbad: ld hl,TimeShabl
pbad: ld b,(hl)
ld a,b
cp 0FFh ;if A=FF then C=0 (nc)
ret z ;Нарушалось питание
inc hl
ld c,(hl)
inc hl
call Wr.RTC
jr Pbad
Rd.RTC: out (RTCreg),a
in a,(RTCdat)
ret
GetByteFromCMOS:
call RTC_timer
ret c
ld a,e
jr Rd.RTC
SetByteToCMOS:
ld d,a ;data for write
call RTC_timer
ld b,e
ld c,d
Wr.RTC: ld a,b
out (RTCreg),a
ld a,c
out (RTCdat),a
Ret
RTC_timer:
call Clr_Ticks ;A=0, NC
ld bc,RTCdat
ei
tb1: ld a,0Ah
call Rd.RTC ;
or a
ret p ;Выход, если часы доступны
ld a,(Ticks)
cp 3 ;Будем ждять снятия busy максимум
jr c,tb1 ;60 ms, после этого времени выход
ld a,0ffh
scf ;с флагом ошибки.
pop bc
ret
ForDate:
ld a,9
jr Fortime+2
ForTime:
ld a,4
out (RTCReg),a
ld c,RTCDat
ret
;════════════════� ��════════════════ ═
;Выход:
;d=месяц (1-12)
;l=год (0-99) xx12
;h=год (0-99) 20xx
;════════════════� ��════════════════ ═
getdate:
call RTC_timer
call ForDate
in l,(c)
dec a ;a=8
out (RTCReg),a
in d,(c)
dec a ;a=7
out (RTCReg),a
in e,(c)
ld a,21h
out (RTCReg),a
in h,(c)
xor a
ret
;════════════════� ��════════════════ ═
;Вход:
;d=месяц (1-12)
;l=год (0-99) xx12
;h=год (0-99) 20xx
;════════════════� ��════════════════ ═
Setdate:call RTC_timer
call ForDate ;a=9 - year:00-99
out (c),l
dec a ;8-месяц
out (RTCReg),a
out (c),d
dec a ;7-day
out (RTCReg),a
out (c),e
ld a,30h ;30h - century
out (RTCReg),a
out (c),h
ret
;════════════════� ��════════════════ ═
;Вход:
;h=час (0-23)
;l=минута (0-59)
;d=секунда (0-59)
;════════════════� ��════════════════ ═
gettime:
call RTC_timer
call ForTime ;Подготовили регистры
in h,(c) ;hour
ld a,2
out (RTCReg),a
in l,(c) ;minutes
xor a
out (RTCReg),a
in d,(c) ;secundes
ret
;════════════════� ��════════════════ ═
;Выход:
;h=час (0-23)
;l=минута (0-59)
;d=секунда (0-59)
;════════════════� ��════════════════ ═
SetTime:
call RTC_timer ;bc=rtcdat
ld a,0Ah
out (RTCreg),a
ld e,27h
out (c),e
inc a ;0B
out (RTCreg),a
ld e,6+128
out (c),e
call ForTime ;4
out (c),h ;hour
ld a,2
out (RTCReg),a
out (c),l ;minutes
xor a
out (RTCReg),a
out (c),d ;secundes
ld a,0Bh
out (RTCreg),a
ld a,00000110b
out (c),a
ret
;════════════════� ��════════════════ ═
;Вход:
;h=час (0-23)
;l=минута (0-59)
;d=секунда (0-59)
;════════════════� ��════════════════ ═
Setalarm:
call RTC_timer
ld b,5
ld c,h
call Wr.RTC
ld b,3
ld c,l
call Wr.RTC
ld b,1
ld c,d
call Wr.RTC
ld a,0Bh
out (RTCReg),a
in e,(c)
set 3,e ;разреш.прямоуг.импульсы
set 5,e ;разреш.прерывание по ALARM
out (c),e
xor a
ret
GetAlarm:
ret
ResAlarm:
call RTC_timer
ld a,0Bh
call Rd.RTC
and 11010111b
out (RTCDat),a
ret
RdCMOSdump:
ld e,0Eh
rdcm1: push hl
push de
call GetByteFromCMOS
jr c,rdcm2
ld (hl),a
pop de
inc e
pop hl
inc hl
bit 6,e ;=64?
jr z,rdcm1
ret
rdcm2: pop de
pop hl
ret
WrCMOSdump:
ld e,0Eh ;начальная ячейка
wrcm1: push hl
push de
ld a,(hl)
call SetByteToCMOS
pop de
inc e
pop hl
inc hl
bit 6,e ;=64?
jr z,wrcm1
ret
;================================================= ===========
Скрытый текст
Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
ZX Evolution Rev B.
Color 48 + Beta Disk Interface +FDD+YM2149F
Орель-08БК
Pentagon-48 (недоссобранный кем-то)
Pentagon-128 (полуубитый)
Кворум-128 (в ремонте)
Магик-05 (в ремонте)
Robotron 1715
Корвет ПК8020 и ПК8010
Amstrad CPC 464
Amstrad CPC 6128[свернуть]
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)