Added clock_settime() for some CBMs.
The CIA TOD only stores the time but not the date. Therefore the date set by clock_settime() ist just stored inside the C library for retrieval via clock_gettime(). The "very special" handling of 12AM/PM is based on https://groups.google.com/d/msg/comp.sys.cbm/ysVYSX4AMbc/vHrXCWEhCOUJ saying: ========== 24hr: Wr => Rd => Nx -------------------- 0 : 92 => 12 => 01 <= Switch from 00 to 01 (24-hour notation) 1 : 01 => 01 => 02 2 : 02 => 02 => 03 11 : 11 => 11 => 92 12 : 12 => 92 => 81 <= Switch from 12 to 13 (24-hour notation) 13 : 81 => 81 => 82 14 : 82 => 82 => 83 23 : 91 => 91 => 12 1. column ("24hr"): hour to be tested (decimal) 2. column ("Wr"): hour written to TOD register (BCD) 3. column ("Rd"): hour read from TOD register (BCD) immediately after writing the value in column 2 to see the conversion between AM/PM, if any 4. column ("Nx"): next hour (BCD) after the hour switch ========== Thanks Paul!
This commit is contained in:
41
libsrc/cbm510/tmcommon.s
Normal file
41
libsrc/cbm510/tmcommon.s
Normal file
@@ -0,0 +1,41 @@
|
||||
;
|
||||
; Oliver Schmidt, 16.8.2018
|
||||
;
|
||||
; Common stuff for the clock routines
|
||||
;
|
||||
|
||||
.include "cbm510.inc"
|
||||
|
||||
.export TM, load_tenth
|
||||
|
||||
.importzp sreg
|
||||
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
.proc load_tenth
|
||||
|
||||
lda #<(100 * 1000 * 1000 / $10000)
|
||||
ldx #>(100 * 1000 * 1000 / $10000)
|
||||
sta sreg
|
||||
stx sreg+1
|
||||
lda #<(100 * 1000 * 1000)
|
||||
ldx #>(100 * 1000 * 1000)
|
||||
rts
|
||||
|
||||
.endproc
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; TM struct with date set to 1970-01-01
|
||||
.data
|
||||
|
||||
TM: .word 0 ; tm_sec
|
||||
.word 0 ; tm_min
|
||||
.word 0 ; tm_hour
|
||||
.word 1 ; tm_mday
|
||||
.word 0 ; tm_mon
|
||||
.word 70 ; tm_year
|
||||
.word 0 ; tm_wday
|
||||
.word 0 ; tm_yday
|
||||
.word 0 ; tm_isdst
|
||||
Reference in New Issue
Block a user