mirror of
https://github.com/cc65/cc65.git
synced 2025-01-12 17:30:50 +00:00
71 lines
1.6 KiB
ArmAsm
71 lines
1.6 KiB
ArmAsm
|
;
|
||
|
; Oliver Schmidt, 15.08.2018
|
||
|
;
|
||
|
; int clock_settime (clockid_t clk_id, const struct timespec *tp);
|
||
|
;
|
||
|
|
||
|
.import __dos_type
|
||
|
.import incsp1, return0
|
||
|
|
||
|
.include "time.inc"
|
||
|
.include "zeropage.inc"
|
||
|
.include "errno.inc"
|
||
|
.include "mli.inc"
|
||
|
|
||
|
_clock_settime:
|
||
|
|
||
|
; Cleanup stack
|
||
|
jsr incsp1 ; Preserves A
|
||
|
|
||
|
; Check for ProDOS 8
|
||
|
ldy __dos_type
|
||
|
beq enosys
|
||
|
|
||
|
; Check for existing minutes or hours
|
||
|
tay ; Save A
|
||
|
lda TIMELO
|
||
|
ora TIMELO+1
|
||
|
bne erange
|
||
|
tya ; Restore A
|
||
|
|
||
|
; Get tm
|
||
|
jsr _localtime
|
||
|
sta ptr1
|
||
|
stx ptr1+1
|
||
|
|
||
|
; Set date
|
||
|
ldy #tm::tm_mon
|
||
|
lda (ptr1),y
|
||
|
clc
|
||
|
adc #$01 ; Move [0..11] to [1..12]
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
php ; Save month msb
|
||
|
ldy #tm::tm_mday
|
||
|
ora (ptr1),y
|
||
|
sta DATELO
|
||
|
ldy #tm::tm_year
|
||
|
lda (ptr1),y
|
||
|
cmp #100 ; Year since 1900 < 100?
|
||
|
bcc :+ ; Yes, leave alone
|
||
|
sbc #100 ; Move 20xx to 19xx
|
||
|
: plp ; Restore month msb
|
||
|
rol
|
||
|
sta DATELO+1
|
||
|
|
||
|
; Return success
|
||
|
jmp return0
|
||
|
|
||
|
; Load errno code
|
||
|
enosys: lda #ENOSYS
|
||
|
bne errno ; Always
|
||
|
|
||
|
; Load errno code
|
||
|
erange: lda #ERANGE
|
||
|
|
||
|
; Set __errno
|
||
|
errno: jmp __directerrno
|