]> git.sur5r.net Git - cc65/blob - libsrc/c64/settime.s
Added clock_settime() for some CBMs.
[cc65] / libsrc / c64 / settime.s
1 ;
2 ; Oliver Schmidt, 16.8.2018
3 ;
4 ; int clock_settime (clockid_t clk_id, const struct timespec *tp);
5 ;
6
7         .include        "time.inc"
8         .include        "c64.inc"
9
10         .importzp       sreg, ptr1
11         .import         pushax, pusheax, ldax0sp, ldeaxidx
12         .import         tosdiveax, incsp3, return0
13         .import         TM, load_tenth
14
15
16 ;----------------------------------------------------------------------------
17 .code
18
19 .proc   _clock_settime
20
21         jsr     pushax
22
23         jsr     _localtime
24         sta     ptr1
25         stx     ptr1+1
26         ldy     #.sizeof(tm)-1
27 @L1:    lda     (ptr1),y
28         sta     TM,y
29         dey
30         bpl     @L1
31
32         lda     TM + tm::tm_hour
33         jsr     dec2BCD
34         tax                     ; Force flags
35         bne     @L2
36         lda     #$92            ; 12 AM
37         bne     @L3
38 @L2:    cmp     #$13            ; 1 PM
39         bcc     @L3
40         sed
41         sbc     #$12
42         cld
43         ora     #%10000000
44 @L3:    sta     CIA1_TODHR
45         lda     TM + tm::tm_min
46         jsr     dec2BCD
47         sta     CIA1_TODMIN
48         lda     TM + tm::tm_sec
49         jsr     dec2BCD
50         sta     CIA1_TODSEC
51
52         jsr     ldax0sp
53         ldy     #3+timespec::tv_nsec
54         jsr     ldeaxidx
55         jsr     pusheax
56         jsr     load_tenth
57         jsr     tosdiveax
58         sta     CIA1_TOD10
59
60         jsr     incsp3
61         jmp     return0
62
63 .endproc
64
65 ;----------------------------------------------------------------------------
66 ; Just sum up the value in BCD mode.
67 ; http://forum.6502.org/viewtopic.php?p=7629#p7629
68
69 .proc   dec2BCD
70
71         tax
72         dex
73         bmi     @L9
74         lda     #0
75         clc
76         sed
77 @L1:    adc     #1
78         dex
79         bpl     @L1
80         cld
81 @L9:    rts
82
83 .endproc