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