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, ldeaxi
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
31        ldx     #>time
32        .assert timespec::tv_sec = 0, error
33        jsr     ldeaxi
34        sta     tmp1            ; Save low byte of result
35
36; Restore timep and check if it is NULL
37
38        pla
39        sta     ptr1+1
40        pla
41        sta     ptr1            ; Restore timep
42        ora     ptr1+1          ; timep == 0?
43        beq     @L1
44
45; timep is not NULL, store the result there
46
47        ldy     #3
48        lda     sreg+1
49        sta     (ptr1),y
50        dey
51        lda     sreg
52        sta     (ptr1),y
53        dey
54        txa
55        sta     (ptr1),y
56        dey
57        lda     tmp1
58        sta     (ptr1),y
59
60; If the result is != 0, return -1
61
62@L1:    lda     tmp2
63        beq     @L2
64
65        tax
66        sta     sreg
67        sta     sreg+1
68        rts
69
70; Reload the low byte of the result and return
71
72@L2:    lda     tmp1
73        rts
74
75.endproc
76
77; ------------------------------------------------------------------------
78; Data
79
80.bss
81time:   .tag    timespec
82