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

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