<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">;
;	Generic OKI Semiconductor MSM5832 Clock Routine for BYE3
;
;	The 5832 is wired with a 74LS138, 74LS85 and input tristate gate
;	based at 0F0h. 0F0h is the seconds 'units' and 0FCh is the year
;	'tens' place. In all cases, the least significant nibble is used
;	for the clock data, the most significant nibble is garbage. Yea, I
;	know it is not the most elegant way to do it, but it is cheap. Of
;	this there is no doubt. My implementation is on the unused prototype 
;	area of a Mullen S100 bus extender. 5 chips, one oddball crystal - 
;	32khz -  and a couple of hearing aid batteries for power down standby 
;	(my clock has been running for over two years without changing them) 
;	... well under 20 bucks and an hour to build. Nothing fancy, but
;	it does work very well.
;
;	Leave me a message in my MINIRBBS and Ill drop ya a drawing of it.
;
;							JP Sojak - sysop
;							Smokin Silicon RCPM
;							(312) 941-0049 
;
; Real-Time clock buffer - is organized as HH:MM:SS YYYY/MM/DD
;
;RTCBUF:
;	DB	99H,99H,99H	;HH:MM:SS (BCD 24HR TIME) 00:00:00-23:59:59
;	DB	19H,84H,01H,31H ;YYYY/MM/DD (BCD ISO DATE)
;
; BYE3 saves and restores registers before/after calling TIME.
;
CBASE	EQU	0F0h
;
	 IF	RTC
TIME:	IN	CBASE+5		; Hours tens place
	ANI	00000011B
	MOV	B,A
	IN	CBASE+4		; Hours ones place
	CALL	SHFTIT
	STA	RTCBUF+0
;
	IN	CBASE+3		; Now the tens of minutes
	ANI	00000111B
	MOV	B,A		; save it at &lt;b&gt; 
	IN	CBASE+2	
	CALL	SHFTIT		
	STA	RTCBUF+1
;
	IN	CBASE+1		; Now the tens of seconds
	ANI	00000111B
	MOV	B,A
	IN	CBASE+0		; now the ticks
	CALL	SHFTIT
	STA	RTCBUF+2
;
;	DB	19H,84H,01H,31H ;YYYY/MM/DD (BCD ISO DATE)
;	
	MVI	A,19H
	STA	RTCBUF+3
	MVI	A,84H
	STA	RTCBUF+4
;
	IN	CBASE+0Ah	; Now the tens of month3
	ANI	00000001B
	MOV	B,A
	IN	CBASE+9		; ones of months
	CALL	SHFTIT
	STA	RTCBUF+5
;
	IN	CBASE+8		; Now the day
	ANI	00000011B
	MOV	B,A
	IN	CBASE+7
	CALL	SHFTIT
	STA	RTCBUF+6
;
CLKEXIT:
	LDA	RTCBUF		; Pick up BCD HH
	CALL	BCDBIN		; Convert to binary
	STA	CCHOUR		; For BYE3
	LDA	RTCBUF+1	; Pick up BCD MM
	CALL	BCDBIN		; Convert to binary
	STA	CCMIN		; For BYE
	RET			; And return (for now..)

SHFTIT:	PUSH	PSW		; Save the units digit
	MOV	A,B		; Recover the Tens
	RLC
	RLC
	RLC
	RLC			; made it the MSN
	MOV	B,A		; save tens here
	POP	PSW		; get the units again
	ANI	00001111B	; and mask crap off
	ORA	B		; OR in the tens place 
	RET			; and return with it in &lt;a&gt;
	 ENDIF	;RTC
;
;		end
;----------------------------------------------------------------
</pre></body></html>