Files
cc65/libsrc/common/localtime.s
2025-12-02 21:37:14 -08:00

46 lines
1.1 KiB
ArmAsm

;
; Colin Leroy-Mira, 2024
;
; struct tm* __fastcall__ localtime (const time_t* timep);
;
.export _localtime
.import __time_t_to_tm, __tz, _tzset_time
.import ldeaxi, tosaddeax, pusheax
.importzp sreg, ptr1
_localtime:
.if .cap(CPU_HAS_PUSHXY)
pha
phx
jsr _tzset_time
plx
pla
.else
pha
txa
pha
jsr _tzset_time
pla
tax
pla
.endif
jsr ldeaxi ; Load value
jsr pusheax ; Push it
lda __tz+1+3
sta sreg+1
lda __tz+1+2
sta sreg
ldx __tz+1+1
lda __tz+1
jsr tosaddeax ; Add _tz.timezone
jsr __time_t_to_tm ; Convert to struct tm
sta ptr1 ; Save returned tm pointer
stx ptr1+1
ldy #16
lda __tz+0 ; Load _tz.daylight
sta (ptr1),y ; Store to tm.tm_isdst
lda ptr1 ; Restore returned tm pointer
ldx ptr1+1
rts ; A/X already set