1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-23 04:30:10 +00:00

Replace vscanf by an assembler version

git-svn-id: svn://svn.cc65.org/cc65/trunk@3307 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2004-11-27 18:23:24 +00:00
parent c67ed28f9b
commit 626314e4cb
4 changed files with 56 additions and 29 deletions

View File

@ -37,7 +37,6 @@ strtok.s
strxfrm.s
system.s
timezone.s
vscanf.s
vsscanf.s

View File

@ -67,7 +67,6 @@ C_OBJS = _afailed.o \
strtok.o \
system.o \
timezone.o \
vscanf.o \
vsscanf.o
@ -170,6 +169,7 @@ S_OBJS = _cwd.o \
vfprintf.o \
vfscanf.o \
vprintf.o \
vscanf.o \
vsprintf.o \
zerobss.o

View File

@ -1,27 +0,0 @@
/*
* vscanf.c
*
* Ullrich von Bassewitz (uz@cc65.org), 2004-11-26
*
*/
#include <stdio.h>
/*****************************************************************************/
/* Code */
/*****************************************************************************/
int __fastcall__ vscanf (const char* format, va_list ap)
/* Standard C function */
{
return vfscanf (stdin, format, ap);
}

55
libsrc/common/vscanf.s Normal file
View File

@ -0,0 +1,55 @@
;
; int __fastcall__ vscanf (const char* format, va_list ap);
;
; Ullrich von Bassewitz, 2004-11-27
;
.export _vscanf
.import _vfscanf
.import _stdin
.import decsp2
.include "zeropage.inc"
; ----------------------------------------------------------------------------
; int __fastcall__ vscanf (const char* format, va_list ap)
; /* Standard C function */
; {
; return vfscanf (stdin, format, ap);
; }
;
.code
_vscanf:
pha ; Save low byte of ap
; Decrement the stack pointer by two for the additional parameter.
jsr decsp2 ; Won't touch X
; Move the format down
ldy #2
lda (sp),y ; Load byte of format
ldy #0
sta (sp),y
ldy #3
lda (sp),y
ldy #1
sta (sp),y
; Store stdin into the stack frame
iny
lda _stdin
sta (sp),y
iny
lda _stdin+1
sta (sp),y
; Restore the low byte of ap and jump to vfscanf, which will cleanup the stack
pla
jmp _vfscanf