📄 rtc.mac
字号:
cmp w,0x36
j eq,leap_y
cmp w,0x40
j eq,leap_y
cmp w,0x44
j eq,leap_y
cmp w,0x48
j eq,leap_y
cmp w,0x52
j eq,leap_y
not_leap_y:
push hl
ld hl,tbl_day
ld w,(hl+c) ;c= MON
pop hl
cmp a,w
ret
leap_y:
cmp a,0x29
ret
tbl_day:
db 0x00 ;00 dummy
db 0x31 ;01 Jan
db 0x28 ;02 Feb(normal year)
db 0x31 ;03 Mar
db 0x30 ;04 Apr
db 0x31 ;05 May
db 0x30 ;06 Jun
db 0x31 ;07 Jul
db 0x31 ;08 Aug
db 0x30 ;09 Sep
db 0x00 ;0a dummy
db 0x00 ;0b dummy
db 0x00 ;0c dummy
db 0x00 ;0d dummy
db 0x00 ;0e dummy
db 0x00 ;0f dummy
db 0x31 ;10 Oct
db 0x30 ;11 Nov
db 0x31 ;12 Dec
;==============================================================================
; RTC data edit and ransfer to PRN_BUF
;==============================================================================
rtc_edit_p:
call spc_prnbuf
ld (PRN_BUF_S),0xfd
@BBS (RTC_TIM,rtc_ep_tim)
@BBS (RTC_DMY,rtc_ep_dmy)
@BBS (RTC_YMD,rtc_ep_ymd)
;mm.dd.20yy format......................
ld a,(MON)
ld (PRN_BUF_MSD),a
ld a,(DAY)
j rtc_ep_2
;dd.mm.20yy format......................
rtc_ep_dmy:
ld a,(DAY)
ld (PRN_BUF_MSD),a
ld a,(MON)
rtc_ep_2:
ld (PRN_BUF_MSD+1),a
ld a,C_DP
rord a,(PRN_BUF_MSD+1) ;reg a -> PRN_BUF_MSD+1 -> reg.a rotate right by nibble
ld (PRN_BUF_MSD+2),C_DP<<4
rord a,(PRN_BUF_MSD+2) ;reg a -> PRN_BUF_MSD+2 -> reg.a rotate right by nibble
ld (PRN_BUF_MSD+3),0x20
ld a,(YEAR)
ld (PRN_BUF_MSD+4),a
j rtc_ep_9
;20yy.mm.dd format.......................
rtc_ep_ymd:
ld (PRN_BUF_MSD),0x20
ld a,(YEAR)
ld (PRN_BUF_MSD+1),a
ld a,(MON)
ld (PRN_BUF_MSD+2),a
ld a,C_DP
rord a,(PRN_BUF_MSD+2) ;reg a -> PRN_BUF_MSD+2 -> reg.a rotate right by nibble
ld (PRN_BUF_MSD+3),C_DP<<4
rord a,(PRN_BUF_MSD+3) ;reg a -> PRN_BUF_MSD+3 -> reg.a rotate right by nibble
ld a,(DAY)
ld (PRN_BUF_MSD+4),a
j rtc_ep_9
;time display................
rtc_ep_tim:
;V1.45 jp rtc_ep_24h ;V1.38
@BBS (RTC_24,rtc_ep_24h)
;hh-mm-ss A/P(12h) format........................
ld a,(HOUR)
ld w,C_AM
cmp a,0x12 ;am?
j lt,rtc_ep_3 ; yes->
ld w,C_PM
sub a,0x12
das a
rtc_ep_3:
cmp a,0
j ne,rtc_ep_4
ld a,0x12
rtc_ep_4:
ld (PRN_BUF_SYM),w
j rtc_ep_8
;hh-mm-ss (24h) format........................
rtc_ep_24h:
ld w,0xc0 ;V1.45
ld a,(HOUR)
rtc_ep_8:
;V1.38 ld (PRN_BUF_MSD+2),a
;V1.38 ld a,0xfd ;#
;V1.38 rord a,(PRN_BUF_MSD+2) ;reg a -> PRN_BUF_MSD+2 -> reg.a rotate right by nibble
;V1.38 ld (PRN_BUF_MSD+3),C_DP<<4
;V1.38 rord a,(PRN_BUF_MSD+3) ;reg a -> PRN_BUF_MSD+3 -> reg.a rotate right by nibble
;V1.38 ld a,(MIN)
;V1.38 ld (PRN_BUF_MSD+4),a
ld (PRN_BUF_MSD+1),a;V2.09 hour into buf
swap a ;V2.09
and a,0x0f ;V2.09
or a,w ;V2.09
ld (PRN_BUF_MSD),a ;V1.38
ld a,C_DP ;V2.09
rold a,(PRN_BUF_MSD+1);V2.09
;V2.09 ld (PRN_BUF_MSD+1),a ;V1.38
ld a,(MIN) ;V1.38
;V2.09 ld (PRN_BUF_MSD+1),a ;V1.38
;V2.09 ld a,C_DP ;V1.38
;V2.09 rord a,(PRN_BUF_MSD+1) ;V1.38 ;reg a -> PRN_BUF_MSD+1 -> reg.a rotate right by nibble
;V2.09 ld (PRN_BUF_MSD+2),C_DP<<4 ;V1.38
;V2.09 rord a,(PRN_BUF_MSD+2) ;V1.38 ;reg a -> PRN_BUF_MSD+3 -> reg.a rotate right by nibble
;V2.09 ld a,(PRN_BUF_MSD+2) ;V1.45
;V2.09 and a,0xf0 ;V1.45 ;V1.45
;V2.09 or a,w ;for Am PM pattern V1.45
;V2.09 or a,0x0c ;V2.09
ld (PRN_BUF_MSD+2),a ;V1.45
ld (PRN_BUF_MSD+3),C_TWODP ;V1.38
ld (PRN_BUF_MSD+4),C_TWODP ;V1.38
rtc_ep_9:
ld a,C_TWODP ;V1.18
ld (PRN_BUF_MSD+5),a ;V1.18
ld (PRN_BUF_MSD+6),a ;V1.18
ld (PRN_BUF_MSD+7),a ;V1.18
ld (PRN_BUF_MSD+8),S_SPC ;V1.18
ld a,(PRN_BUF_MSD) ;V2.10
and a,0xf0 ;V2.10
j ne,rtc_ep_99 ;V2.10
or (PRN_BUF_MSD),0xc0 ;V2.10
rtc_ep_99:
ret
;==============================================================================
; RTC data edit and transfer to DISP
;==============================================================================
rtc_edit_d:
call spc_disp
@BBS (RTC_TIM,rtc_ed_tim) ;time display? yes->
@BBS (RTC_DMY,rtc_ed_dmy)
@BBS (RTC_YMD,rtc_ed_ymd)
;mm-dd-20yy format......................
ld de,DISP+4
ld a,(MON)
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(DAY)
j rtc_ed_2
;dd-mm-20yy format......................
rtc_ed_dmy:
ld de,DISP+4
ld a,(DAY)
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(MON)
rtc_ed_2:
call bcd_to_disp
ld (de),D_HYPN
inc de
ld (de),D_2
inc de
ld (de),D_0
inc de
ld a,(YEAR)
call bcd_to_disp
j rtc_ed_9
;20yy-mm-dd format.......................
rtc_ed_ymd:
ld de,DISP+4
ld (de),D_2
inc de
ld (de),D_0
inc de
ld a,(YEAR)
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(MON)
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(DAY)
call bcd_to_disp
j rtc_ed_9
;time display............
rtc_ed_tim:
@BBS (RTC_24,rtc_ed_24h)
;hh-mm-ss A/P(12h) format........................
ld a,(HOUR)
ld w,D_A
cmp a,0x12 ;am?
j lt,rtc_ed_5 ; yes->
ld w,D_P
sub a,0x12
das a
rtc_ed_5:
cmp a,0
j ne,rtc_ep_6
ld a,0x12
rtc_ep_6:
;V1.23 ld (DISP_LSD),w
ld (DISP+4),w ;V1.23
j rtc_ed_7
;hh-mm-ss(24h) format........................
rtc_ed_24h:
ld a,(HOUR)
rtc_ed_7:
;V1.23 ld de,DISP+4
ld de,DISP+6 ;V1.23
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(MIN)
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(SEC)
call bcd_to_disp
rtc_ed_9:
ret
;HL: BCD data address
;DE: distination address(DE is increased)
bcd_to_disp:
push wa
swap a
and a,0y00001111
ld (de),a
inc de
pop wa
and a,0y00001111
ld (de),a
inc de
ret
;==============================================================================
; TEMP data edit and transfer to DISP(for RTC setting)
;==============================================================================
temp_edit_d:
@SEB (F_DOFF) ;V2.10
call spc_disp
@BBS (RTC_TIM,temp_ed_tim) ;time display? yes->
@BBS (RTC_DMY,temp_ed_dmy)
@BBS (RTC_YMD,temp_ed_ymd)
;mm-dd-20yy format......................
ld de,DISP+4
ld a,(T_MON)
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(T_DAY)
j temp_ed_2
;dd-mm-20yy format......................
temp_ed_dmy:
ld de,DISP+4
ld a,(T_DAY)
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(T_MON)
temp_ed_2:
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(T_Y20)
call bcd_to_disp
ld a,(T_YEAR)
call bcd_to_disp
j temp_ed_9
;20yy-mm-dd format.......................
temp_ed_ymd:
ld de,DISP+4
ld a,(T_Y20)
call bcd_to_disp
ld a,(T_YEAR)
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(T_MON)
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(T_DAY)
call bcd_to_disp
j temp_ed_9
;time display............
temp_ed_tim:
@BBS (RTC_24,temp_ed_24h)
;hh-mm-ss A/P(12h) format........................
ld a,(T_AMPM)
ld w,D_A
shrc a ;shift->
j cc,temp_ed_5 ;bit1 of T_AMPM 0:AM 1:PM
ld w,D_P
temp_ed_5:
;V1.23 ld (DISP_LSD),w
ld (DISP+4),w ;V1.23
;hh-mm-ss(24h) format........................
temp_ed_24h:
ld a,(T_HOUR)
temp_ed_7:
;V1.23 ld de,DISP+4
ld de,DISP+6 ;V1.23
call bcd_to_disp
ld (de),D_HYPN
inc de
ld a,(T_MIN)
call bcd_to_disp
temp_ed_9:
ld c,(BLK_D)
cmp c,0xff
j eq,temp_ed_99
cmp c,14
j ge,temp_ed_99
ld hl,DISP_MSD
ld (hl+c),D_SPC
temp_ed_99:
ret
;==============================================================================
; sub clock test
;==============================================================================
clock_test:
clr (EIRH).EF8 ;TC3(interval TM & PF detection) interrupt disable
clr (EIRL).EF7 ;time base interrupt disable
ld (TBTCR),0y00010100 ;(DV7CK=1 TBTCK=001) -> select 1/1024sec interrupt,
ld (TBTCR),0y00011100 ;TBTEN=1 time base enable
; ld (ILL),0y01111111 ;clear time base int request (ILL:bit7)
clr (ILL).IL7 ;clear TBT request flag
;TC3(8bit timer use for time out detection)....
ld (TC3SEL),0y00000000
ld (TC3CR),0y00001010 ;TC3S=0(count stop) TC3CK=101(select fc/2^8) TC3M=0(select 8bit timer mode)
ld (TC3DRA),244 ;(8000000Hz/256/244=15.25Hz=128Hz
; ld (ILH),0y11011111 ;clear TC3 int request (ILH:bit6)
clr (ILH).IL8
ld (TC3CR),0y00011010 ;TC3S=1(TC3 count start)
clock_t0:
ld cf,(ILH).IL8 ;check 100ms time out
j cc,clock_t0 ; wait 100ms ->
ld (TC3CR),0y00001010 ;TC3S=0(TC3 count stop)
ld (TC3DRA),244 ;(8000000Hz/256/244=1128Hz time out)
; ld (ILH),0y11011111 ;clear TC3 int request (ILH:bit6)
clr (ILH).IL8 ;
ld (TC3CR),0y00011010 ;TC3S=1(TC3 count start)
ld c,0
clock_t2:
ld cf,(ILH).IL8 ;check 100ms time out
;V2.00 j cs,clock_t8 ; time out -> no sub clock
ld cf,(ILL).IL6
j cc,clock_t2 ;if no request for sub clock int. yes->
inc c
cmp c,10 ;request 10 times?
j ge,clock_t9 ;confirmed sub clock is mounted ->
; ld (ILL),0y01111111 ;clear time base int request (ILL:bit7)
clr (ILL).IL7
nop
j clock_t2
clock_t8:
@SEB (NO_CLK) ;sub clock not mounted
clock_t9:
ld (TBTCR),0y00000000 ;time base disable
ld (TC3CR),0y00001010 ;TC3S=1(T32 count stop)
; ld (ILL),0y01111111 ;
; ld (ILH),0y11011111 ;
clr (ILL).EF7 ;clear time base int request (ILL:bit7)
clr (ILH).EF8 ;clear TC2 int request (ILH:bit6)
;V3.00 call init_pf ;initialize Timer2 for power failure detection and interval timer
call init_rtc ;initialize Time base timer for RTC
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -