NEW
  AUTO 3,1
*--------------------------------------
* Driver For DS1216E
*--------------------------------------
* we can safely use $200 (used by TCLK)
*--------------------------------------
DS1216E.DATA	.EQ $200				Reverted YY MM DD Day HH mm SS CS
*--------------------------------------
NCLK.START		.PH CLK

NCLK.START1		php
				sei						NO IRQ !!!

				lda IO.RDCXROM
				php
				
				sta IO.SETCXROM

				sta NSC.IOBASE
*				lda $C00B               Workaround for Ultrawarp bug
				
				lda NSC.IOBASE+4		Reset DS1216E comparison register with READ A2=1

				ldy #8					Read 8 bytes...

.1				lda DS1216E.SIG-1,y
				phy
				
				ldy #8					....of 8 bits
				
.2				ldx #0
				lsr
				bcc .3
				
				inx
				
.3				bit NSC.IOBASE,x		Write Pattern bit in A0, with A2=0
				
				dey
				bne .2

				ply
				dey
				bne .1

				ldx #8

.4				ldy #8

.5				pha
				lda NSC.IOBASE+4		Read Byte...

				lsr
				pla
				ror

				dey
				bne .5

				pha
				lsr
				lsr
				lsr
				lsr
				tay
				pla
				and #$0F

				clc

				.HS	2C					Bit Absolute to skip adc #$0A

.6				adc #$0A
				dey
				bpl .6

				sta DS1216E.DATA-1,x
				dex
				bne .4

				pha						DS1216E.DATA

				lda	DS1216E.DATA+1		Get MM
				asl
				asl
				asl
				asl
				asl
				ora	DS1216E.DATA+2		Get DD
				sta	GP.DATE

*				lda	DS1216E.DATA		Get YY
				
				pla
				rol
				sta	GP.DATE+1

				lda	DS1216E.DATA+5		Get mm
				sta	GP.TIME

				lda	DS1216E.DATA+4		Get HH
				sta	GP.TIME+1

				plp
				bmi .8

				sta IO.CLRCXROM

.8				plp
				rts
*--------------------------------------
DS1216E.SIG		.HS	5CA33AC55CA33AC5	Reverted 7->0
*--------------------------------------
				.EP
*--------------------------------------
*				.LIST ON
NCLK.LEN		.EQ *-NCLK.START
				.LIST OFF
*--------------------------------------
* CONTROL SECTION :
*--------------------------------------
				.DO NCLK.LEN>125
				ERROR:NCLK Driver too big
				.FIN
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.nclk
LOAD usr/src/prodos.fx/prodos.s
ASM
