NEW AUTO 3,1 *-------------------------------------- * Thunderclock driver * hard coded for slot 1 *-------------------------------------- clkmode .EQ $0538 clock mode rdtcp .EQ $C108 Thunderclock read entry wttcp .EQ $C10B Thunderclock write entry *-------------------------------------- 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 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. * https://calormen.com/tmp/proyear.html * For 2022 - 2027: $18, $17, $16, $1B, $1A, $19, $18 yradj .DA #$18 Monday .DA #$17 Sunday .DA #$16 Saturday .DA #$1B Friday .DA #$1A Thursday .DA #$19 Wednesday .DA #$18 Tuesday *-------------------------------------- .LIST ON TCLK.LEN .EQ *-TCLK.START .LIST OFF *-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.tclk LOAD usr/src/prodos.fx/prodos.s ASM