A2osX/ProDOS.FX/ProDOS.S.TCLK.txt
2023-11-04 15:42:28 +01:00

126 lines
3.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 .PH CLK
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 ROM.INBUF,y convert values to binary.
and #$07 no value > 5 decimal.
sta ZP.PCL 'tens' place value
asl multiply by 10
asl
adc ZP.PCL
asl
adc ROM.INBUF+1,y add to ascii 'ones' place
sec and subtract out the ascii
sbc #$B0
sta ZP.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 ZP.A1L
sta GP.DATE 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 ZP.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 GP.DATE+1 P8 date
lda ZP.A1L+1 hour
sta GP.TIME+1 P8 time
lda ZP.A2L minute
sta GP.TIME
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
*--------------------------------------
.EP
*--------------------------------------
* .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