mirror of
https://github.com/cc65/cc65.git
synced 2024-08-20 09:29:12 +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
|