From 626314e4cbc8c02c46ce86ce69adc789045d090f Mon Sep 17 00:00:00 2001 From: cuz Date: Sat, 27 Nov 2004 18:23:24 +0000 Subject: [PATCH] Replace vscanf by an assembler version git-svn-id: svn://svn.cc65.org/cc65/trunk@3307 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/common/.cvsignore | 1 - libsrc/common/Makefile | 2 +- libsrc/common/vscanf.c | 27 -------------------- libsrc/common/vscanf.s | 55 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 29 deletions(-) delete mode 100644 libsrc/common/vscanf.c create mode 100644 libsrc/common/vscanf.s diff --git a/libsrc/common/.cvsignore b/libsrc/common/.cvsignore index d8d6186b3..b15eaacc8 100644 --- a/libsrc/common/.cvsignore +++ b/libsrc/common/.cvsignore @@ -37,7 +37,6 @@ strtok.s strxfrm.s system.s timezone.s -vscanf.s vsscanf.s diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index 43b56ba1c..2aad615ca 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -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 diff --git a/libsrc/common/vscanf.c b/libsrc/common/vscanf.c deleted file mode 100644 index 0523980ae..000000000 --- a/libsrc/common/vscanf.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * vscanf.c - * - * Ullrich von Bassewitz (uz@cc65.org), 2004-11-26 - * - */ - - - -#include - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -int __fastcall__ vscanf (const char* format, va_list ap) -/* Standard C function */ -{ - return vfscanf (stdin, format, ap); -} - - - diff --git a/libsrc/common/vscanf.s b/libsrc/common/vscanf.s new file mode 100644 index 000000000..038b79741 --- /dev/null +++ b/libsrc/common/vscanf.s @@ -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 +