]> git.sur5r.net Git - cc65/blob - libsrc/c64/systime.s
Added a systime implementation by Stefan Haubenthal with a few changes. The
[cc65] / libsrc / c64 / systime.s
1 ;
2 ; Stefan Haubenthal, 27.7.2009
3 ;
4 ; time_t _systime (void);
5 ; /* Similar to time(), but:
6 ;  *   - Is not ISO C
7 ;  *   - Does not take the additional pointer
8 ;  *   - Does not set errno when returning -1
9 ;  */
10 ;
11
12         .include        "time.inc"
13         .include        "c64.inc"
14
15         .importzp               tmp1, tmp2
16
17 .code
18
19 ; Jan 1st 1970, CIA #1 TOD
20 .proc   __systime
21
22         lda     #70
23         sta     TM + tm::tm_year
24         lda     #1
25         sta     TM + tm::tm_mday
26         lda     CIA1_TODHR
27         bpl     AM
28         and     #%01111111
29         sed
30         clc
31         adc     #$12
32         cld
33 AM:     jsr     BCD2dec
34         sta     TM + tm::tm_hour
35         lda     CIA1_TODMIN
36         jsr     BCD2dec
37         sta     TM + tm::tm_min
38         lda     CIA1_TODSEC
39         jsr     BCD2dec
40         sta     TM + tm::tm_sec
41         lda     CIA1_TOD10              ; Dummy read to unfreeze
42         lda     #<TM
43         ldx     #>TM
44         jmp     _mktime
45
46 ; dec = (((BCD>>4)*10) + (BCD&0xf))
47 BCD2dec:tax
48         and     #%00001111
49         sta     tmp1
50         txa
51         and     #%11110000      ; *16
52         lsr                     ; *8
53         sta     tmp2
54         lsr
55         lsr                     ; *2
56         adc     tmp2            ; = *10
57         adc     tmp1
58         rts
59
60 .endproc
61
62 .bss
63
64 TM:     .tag    tm