]> git.sur5r.net Git - cc65/blob - libsrc/common/time.s
9b297d4d350bbef25e42ed2771f6876bfa48c78b
[cc65] / libsrc / common / time.s
1 ;
2 ; Ullrich von Bassewitz, 12.11.2002
3 ;
4 ; time_t __fastcall__ time (time_t* timep);
5 ;
6
7         .export         _time
8
9         .import         decsp1
10         .importzp       ptr1, sreg, tmp1, tmp2
11
12         .include        "time.inc"
13
14
15 .code
16
17 .proc   _time
18
19         pha
20         txa
21         pha                     ; Save timep
22
23 ; Get the time (machine dependent)
24
25         jsr     decsp1
26         lda     #<time
27         ldx     #>time
28         jsr     _clock_gettime
29         sta     tmp2
30         lda     time + timespec::tv_sec+2
31         ldx     time + timespec::tv_sec+3
32         sta     sreg
33         stx     sreg+1
34         lda     time + timespec::tv_sec
35         ldx     time + timespec::tv_sec+1
36         sta     tmp1            ; Save low byte of result
37
38 ; Restore timep and check if it is NULL
39
40         pla
41         sta     ptr1+1
42         pla
43         sta     ptr1            ; Restore timep
44         ora     ptr1+1          ; timep == 0?
45         beq     @L1
46
47 ; timep is not NULL, store the result there
48
49         ldy     #3
50         lda     sreg+1
51         sta     (ptr1),y
52         dey
53         lda     sreg
54         sta     (ptr1),y
55         dey
56         txa
57         sta     (ptr1),y
58         dey
59         lda     tmp1
60         sta     (ptr1),y
61
62 ; If the result is != 0, return -1
63
64 @L1:    lda     tmp2
65         beq     @L2
66
67         tax
68         sta     sreg
69         sta     sreg+1
70         rts
71
72 ; Reload the low byte of the result and return
73
74 @L2:    lda     tmp1
75         rts
76
77 .endproc
78
79 ; ------------------------------------------------------------------------
80 ; Data
81
82 .bss
83 time:   .tag    timespec