]> git.sur5r.net Git - cc65/blob - libsrc/c128/gettime.s
Added clock_settime() for some CBMs.
[cc65] / libsrc / c128 / gettime.s
1 ;
2 ; Stefan Haubenthal, 27.7.2009
3 ; Oliver Schmidt, 14.8.2018
4 ;
5 ; int clock_gettime (clockid_t clk_id, struct timespec *tp);
6 ;
7
8         .include        "time.inc"
9         .include        "c128.inc"
10
11         .importzp       sreg, tmp1, tmp2
12         .import         pushax, pusheax, tosmul0ax, steaxspidx, incsp1, return0
13         .import         TM, load_tenth
14
15
16 ;----------------------------------------------------------------------------
17 .code
18
19 .proc   _clock_gettime
20
21         jsr     pushax
22         jsr     pushax
23
24         lda     CIA1_TODHR
25         sed
26         tax                     ; Save PM flag
27         and     #%01111111
28         cmp     #$12            ; 12 AM/PM
29         bcc     @L1
30         sbc     #$12
31 @L1:    inx                     ; Get PM flag
32         bpl     @L2
33         clc
34         adc     #$12
35 @L2:    cld
36         jsr     BCD2dec
37         sta     TM + tm::tm_hour
38         lda     CIA1_TODMIN
39         jsr     BCD2dec
40         sta     TM + tm::tm_min
41         lda     CIA1_TODSEC
42         jsr     BCD2dec
43         sta     TM + tm::tm_sec
44         lda     #<TM
45         ldx     #>TM
46         jsr     _mktime
47
48         ldy     #timespec::tv_sec
49         jsr     steaxspidx      ; Pops address pushed by 2. pushax
50
51         jsr     load_tenth
52         jsr     pusheax
53         lda     CIA1_TOD10
54         ldx     #>$0000
55         jsr     tosmul0ax
56
57         ldy     #timespec::tv_nsec
58         jsr     steaxspidx      ; Pops address pushed by 1. pushax
59
60         jsr     incsp1
61         jmp     return0
62
63 .endproc
64
65 ;----------------------------------------------------------------------------
66 ; dec = (((BCD>>4)*10) + (BCD&0xf))
67
68 .proc   BCD2dec
69
70         tax
71         and     #%00001111
72         sta     tmp1
73         txa
74         and     #%11110000      ; *16
75         lsr                     ; *8
76         sta     tmp2
77         lsr
78         lsr                     ; *2
79         adc     tmp2            ; = *10
80         adc     tmp1
81         rts
82
83 .endproc