⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtc.mac

📁 calculator code ,use toshibaor nec LSI
💻 MAC
📖 第 1 页 / 共 3 页
字号:
		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 + -