mirror of
https://github.com/cc65/cc65.git
synced 2024-12-27 00:29:31 +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:
parent
c67ed28f9b
commit
626314e4cb
@ -37,7 +37,6 @@ strtok.s
|
||||
strxfrm.s
|
||||
system.s
|
||||
timezone.s
|
||||
vscanf.s
|
||||
vsscanf.s
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
55
libsrc/common/vscanf.s
Normal 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
|
||||
|
Loading…
Reference in New Issue
Block a user