cc65/libsrc/conio/cscanf.s

63 lines
1.3 KiB
ArmAsm

;
; int cscanf(const char* format, ...);
;
; 2000-12-01, Ullrich von Bassewitz
; 2005-01-01, Greg King
;
.export _cscanf
.import pushax, addysp, _vcscanf
.macpack generic
.include "zeropage.inc"
; ----------------------------------------------------------------------------
; Code
;
_cscanf:
sty ArgSize ; Number of argument bytes passed in .Y
dey ; subtract size of format pointer
dey
tya
; Now, calculate the va_list pointer -- which points to format.
ldx sp+1
add sp
bcc @L1
inx
@L1: sta ptr1
stx ptr1+1
; Push a copy of the format pointer onto the stack.
ldy #1
lda (ptr1),y
tax
dey
lda (ptr1),y
jsr pushax
; Load va_list [last and __fastcall__ argument for vcscanf()].
lda ptr1
ldx ptr1+1
; Call vcscanf().
jsr _vcscanf
; Clean up the stack. We will return what we got from vcscanf().
ldy ArgSize
jmp addysp
; ----------------------------------------------------------------------------
; Data
;
.bss
ArgSize:
.res 1 ; Number of argument bytes