Update from Oliver Schmidt

git-svn-id: svn://svn.cc65.org/cc65/trunk@3766 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz
2007-01-05 16:16:34 +00:00
parent 4846c27c77
commit 88aedc2e29
5 changed files with 111 additions and 15 deletions

View File

@@ -1,5 +1,5 @@
;
; Ullrich von Bassewitz, 12.11.2002
; Oliver Schmidt, 22.08.2006
;
; time_t _systime (void);
; /* Similar to time(), but:
@@ -9,13 +9,69 @@
; */
;
.export __systime
.export __systime
.import _mktime
.include "zeropage.inc"
.include "zeropage.inc"
.include "mli.inc"
.struct tm
tm_sec .word
tm_min .word
tm_hour .word
tm_mday .word
tm_mon .word
tm_year .word
tm_wday .word
tm_yday .word
tm_isdst .word
.endstruct
__systime:
lda #$FF
tax
sta sreg
sta sreg+1
rts ; Return -1
; Update time
lda #GET_TIME_CALL
ldx #GET_TIME_COUNT
jsr callmli
bcs err
lda DATELO+1
lsr
php ; Save month msb
cmp #70 ; Year < 70?
bcs :+ ; No, leave alone
adc #100 ; Move 19xx to 20xx
: sta TM + tm::tm_year
lda DATELO
tax ; Save day
plp ; Restore month msb
ror
lsr
lsr
lsr
lsr
beq err ; [1..12] allows for validity check
tay
dey ; Move [1..12] to [0..11]
sty TM + tm::tm_mon
txa ; Restore day
and #%00011111
sta TM + tm::tm_mday
lda TIMELO+1
sta TM + tm::tm_hour
lda TIMELO
sta TM + tm::tm_min
lda #<TM
ldx #>TM
jmp _mktime
err: lda #$FF
tax
sta sreg
sta sreg+1
rts ; Return -1
.bss
TM: .tag tm