NEW AUTO 3,1 * object code = tclock_0 * Thunderclock driver * hard coded for slot 1 * $2F00-2F7C moved to $D742 ofsT .EQ tclock_0-tclk_in offset to Thunderclock org tclock_0 ldx clkslt clock slot = $C1. lda clkmode,x save current mode pha lda #$A3 send numeric mode byte to Thunderclock jsr wttcp clkslt .EQ *-ofsT+2 points to $C1. 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. H2F14 lda inbuf,y convert values to binary. and #$07 no value > 5 decimal. sta pcl 'tens' place value asl a multiply by 10 asl a adc pcl asl a 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 H2F14 if yes. tay contains month lsr a ror a ror a ror a 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 H2F42 branch if not Sept 13 thru 30th adc #$03 adj for mod 7 when day > 256 H2F42 sec H2F43 sbc #$07 bcs H2F43 loop until < 0. adc #$07 make it in the range of 0-6. sbc pch the delta provides years offset. bcs H2F4F branch if positive adc #$07 else make it positive again. H2F4F tay lda yradj,y look up year plp and combine it with hi bit of month rol a sta p8date+1 P8 date lda A1L+1 hour sta p8time+1 P8 time lda A2L minute sta p8time pla restore previous mode. ldx clkslt clock slot = $C1 sta clkmode,x H2F69 rts * this table contains entries for the cumulative # of days in a year, * one entry for each month. the values are modulo 256. tdays .EQ *-ofsT .DA #00' January dc h'1F' February dc h'3B' March dc h'5A' April dc h'78' May dc h'97' June dc h'B5' July dc h'D3' August .DA #F2' September dc h'14' October (MOD 256) dc h'33' November dc h'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 .EQ *-ofsT dc h'60' Monday dc h'5F' Sunday dc h'5E' Saturday dc h'5D' Friday .DA #62' Thursday dc h'61' Wednesday dc h'60' Tuesday tclk_end .EQ * end of obj tclock_0. dc h'000000' pad *-------------------------------------- MAN LOAD USR/SRC/PRODOS.203/PRODOS.S.TCLK SAVE USR/SRC/PRODOS.203/PRODOS.S ASM