mirror of
https://github.com/cc65/cc65.git
synced 2024-11-16 02:10:52 +00:00
82 lines
1.5 KiB
ArmAsm
82 lines
1.5 KiB
ArmAsm
;
|
|
; Colin Leroy-Mira, 2024
|
|
;
|
|
; char* __fastcall__ asctime (const struct tm* timep)
|
|
;
|
|
|
|
.export _asctime
|
|
.import _strftime, pushax
|
|
.importzp ptr1
|
|
.include "time.inc"
|
|
|
|
.macpack cpu
|
|
|
|
; ------------------------------------------------------------------------
|
|
; Special values
|
|
|
|
; We need to be able to store up to 38 bytes:
|
|
; 1234567890123456789012345678901234567
|
|
; "Wednesday September ..1 00:00:00 1970"
|
|
MAX_BUF_LEN = 38
|
|
|
|
; ------------------------------------------------------------------------
|
|
; Code
|
|
|
|
_asctime:
|
|
; Backup timep
|
|
.if (.cpu .bitand ::CPU_ISET_65SC02)
|
|
pha
|
|
phx
|
|
.else
|
|
sta ptr1
|
|
stx ptr1+1
|
|
.endif
|
|
|
|
; Push buf
|
|
lda #<buf
|
|
ldx #>buf
|
|
jsr pushax
|
|
|
|
; Push sizeof(buf)
|
|
lda #<MAX_BUF_LEN
|
|
ldx #>MAX_BUF_LEN
|
|
jsr pushax
|
|
|
|
; Push format string
|
|
lda #<fmt
|
|
ldx #>fmt
|
|
jsr pushax
|
|
|
|
; Restore timep
|
|
.if (.cpu .bitand ::CPU_ISET_65SC02)
|
|
plx
|
|
pla
|
|
.else
|
|
lda ptr1
|
|
ldx ptr1+1
|
|
.endif
|
|
|
|
; Call formatter
|
|
jsr _strftime
|
|
|
|
; Check return status
|
|
bne :+
|
|
cpx #$00
|
|
bne :+
|
|
rts
|
|
|
|
: lda #<buf
|
|
ldx #>buf
|
|
rts
|
|
|
|
.data
|
|
|
|
fmt: .byte '%'
|
|
.byte 'c'
|
|
.byte $0A
|
|
.byte $00
|
|
|
|
.bss
|
|
|
|
buf: .res MAX_BUF_LEN
|