NEW
  AUTO 3,1
* object code = tclock_0
* Thunderclock driver
* hard coded for slot 1

* $2F00-2F7C moved to $D742

TCLK.START		ldx TCLK.Cx2+2			clock slot = $C1.

				lda clkmode,x			save current mode
				pha
				lda #$A3				send numeric mode byte to Thunderclock

TCLK.Cx1		jsr	wttcp

TCLK.Cx2		jsr	rdtcp				read month, day of week, day of month
				clc						and time into input buffer.
				ldx #$04				index for 5 values.
				ldy	#$0C				read minutes 1st, month last.
.1				lda	inbuf,y				convert values to binary.
				and	#$07				no value > 5 decimal.
				sta	pcl					'tens' place value
				asl	 					multiply by 10
				asl
				adc pcl
				asl 
				adc inbuf+1,y			add to ascii 'ones' place
				sec						and subtract out the ascii
				sbc #$B0
				sta	pcl,x				save converted value.
				dey						index to next lowest value
				dey
				dey
				dex						are there more values?
				bpl .1					if yes.
				tay						contains month
				lsr
				ror
				ror
				ror						high bit of month held in carry
				ora A1L
				sta p8date				save low value of date.
				php						save high bit of month.
				and #$1F				isolate day.
				adc	tdays-1,y			(y = month)
				bcc	.2					branch if not Sept 13 thru 30th
				adc	#$03				adj for mod 7 when day > 256
.2				sec
.3				sbc	#$07
				bcs	.3					loop until < 0.
				adc	#$07				make it in the range of 0-6.
				sbc pch					the delta provides years offset.
				bcs .4					branch if positive
				adc #$07				else make it positive again.
.4				tay		
				lda yradj,y				look up year
				plp						and combine it with hi bit of month
				rol
				sta p8date+1			P8 date
				lda A1L+1				hour
				sta p8time+1			P8 time
				lda A2L					minute
				sta p8time
				pla						restore previous mode.
				ldx TCLK.Cx2+2			clock slot = $C1
				sta clkmode,x
TCLK.CEND		rts

* this table contains entries for the cumulative # of days in a year,
* one entry for each month. the values are modulo 256.

tdays			.DA #$00				January
				.DA #$1F				February
				.DA #$3B				March
				.DA #$5A				April
				.DA #$78				May
				.DA #$97				June
				.DA #$B5				July
				.DA #$D3				August
				.DA #$F2				September
				.DA #$14				October (MOD 256)
				.DA #$33				November
				.DA #$51				December

* the following table is used to look up the current year, based on
* the current month, day and day of week. The 1st entry corresponds
* to the year in which January 1st falls on a Monday. The 2nd entry
* is the year which January 1st is Sunday, and so on backwards thru
* the days of the week.

yradj			.DA #$18				Monday
				.DA #$17				Sunday
				.DA #$16				Saturday
				.DA #$1B				Friday
				.DA #$1A				Thursday
				.DA #$19				Wednesday
				.DA #$18				Tuesday
				
TCLK.END		.HS 000000			 	pad
*--------------------------------------
MAN
SAVE usr/src/prodos.203/prodos.s.tclk
LOAD usr/src/prodos.203/prodos.s
ASM
