]> git.sur5r.net Git - cc65/blobdiff - libsrc/apple2/systime.s
Update from Oliver Schmidt
[cc65] / libsrc / apple2 / systime.s
index 5711fccaedc88119ac191a943ed066e23d9666bb..68ca00bb3237c7d62ae01e503043f94f20e6d3ae 100644 (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
\ No newline at end of file