]> git.sur5r.net Git - cc65/blob - libsrc/apple2/gettime.s
Replaced _systime with clock_gettime.
[cc65] / libsrc / apple2 / gettime.s
1 ;
2 ; Oliver Schmidt, 14.08.2018
3 ;
4 ; int clock_gettime (clockid_t clk_id, struct timespec *tp);
5 ;
6
7         .import         pushax, steaxspidx, incsp1, incsp3, return0
8
9         .include        "time.inc"
10         .include        "zeropage.inc"
11         .include        "errno.inc"
12         .include        "mli.inc"
13
14 _clock_gettime:
15         jsr     pushax
16
17         ; Clear tv_nsec (+ tv_sec)
18         sta     ptr1
19         stx     ptr1+1
20         lda     #$00
21         ldy     #.sizeof(timespec)-1
22 :       sta     (ptr1),y
23         dey
24         bpl     :-
25
26         ; Update date + time
27         lda     #GET_TIME_CALL
28         ldx     #GET_TIME_COUNT
29         jsr     callmli
30         bcs     oserr
31
32         ; Get date
33         lda     DATELO+1
34         lsr
35         php                     ; Save month msb
36         cmp     #70             ; Year < 70?
37         bcs     :+              ; No, leave alone
38         adc     #100            ; Move 19xx to 20xx
39 :       sta     TM + tm::tm_year
40         lda     DATELO
41         tax                     ; Save day
42         plp                     ; Restore month msb
43         ror
44         lsr
45         lsr
46         lsr
47         lsr
48         beq     erange          ; [1..12] allows for validity check
49         tay
50         dey                     ; Move [1..12] to [0..11]
51         sty     TM + tm::tm_mon
52         txa                     ; Restore day
53         and     #%00011111
54         sta     TM + tm::tm_mday
55
56         ; Get time
57         lda     TIMELO+1
58         sta     TM + tm::tm_hour
59         lda     TIMELO
60         sta     TM + tm::tm_min
61
62         ; Make time_t
63         lda     #<TM
64         ldx     #>TM
65         jsr     _mktime
66
67         ; Store tv_sec
68         ldy     #timespec::tv_sec
69         jsr     steaxspidx
70
71         ; Return success
72         jsr     incsp1
73         jmp     return0
74
75         ; Load errno code
76 erange: lda     #ERANGE
77
78         ; Cleanup stack
79         jsr     incsp3          ; Preserves A
80
81         ; Set __errno
82         jmp     __directerrno
83
84         ; Cleanup stack
85 oserr:  jsr     incsp3          ; Preserves A
86
87         ; Set __oserror
88         jmp     __mappederrno
89
90         .bss
91
92 TM:     .tag    tm