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