]> git.sur5r.net Git - cc65/commitdiff
Rewrote vprintf in assembler and made it __fastcall__
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 2 Jun 2003 16:08:26 +0000 (16:08 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 2 Jun 2003 16:08:26 +0000 (16:08 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2186 b7a2c559-68d2-44c3-8de9-860c34a00d81

include/stdio.h
libsrc/common/.cvsignore
libsrc/common/Makefile
libsrc/common/vprintf.c [deleted file]
libsrc/common/vprintf.s [new file with mode: 0644]

index 47db40c85a30cf4f2cc4dc9bb9b036dbb2ac23aa..9e77bacd916e4677803ddf1d2675413e5267773f 100644 (file)
@@ -102,7 +102,7 @@ int remove (const char* name);
 int rename (const char* old, const char* new);
 int sprintf (char* buf, const char* format, ...);
 int __fastcall__ vfprintf (FILE* f, const char* format, va_list ap);
-int vprintf (const char* format, va_list ap);
+int __fastcall__ vprintf (const char* format, va_list ap);
 int __fastcall__ vsprintf (char* buf, const char* format, va_list ap);
 
 /* Not available or testing: */
index 92e2088b4a5c6ec5a79ab1c391a94276c24b96b2..6038dd9e4693e7a5c122c0a5455f97ae5ccb87f7 100644 (file)
@@ -33,6 +33,6 @@ sscanf.s
 strftime.s
 strtok.s
 strxfrm.s
+system.s
 timezone.s
-vprintf.s
 vsscanf.s
index cb77af872c10b99e2cb2024aba61905abe2a10ab..52b460c884858d6891683294599fea78e1c02155 100644 (file)
@@ -53,7 +53,6 @@ C_OBJS =      _afailed.o      \
                strtok.o        \
                 system.o        \
                 timezone.o      \
-               vprintf.o       \
                 vsscanf.o
 
 
@@ -139,6 +138,7 @@ S_OBJS =    _fdesc.o        \
                tolower.o       \
                toupper.o       \
                vfprintf.o      \
+               vprintf.o       \
                vsprintf.o      \
                zerobss.o
 
diff --git a/libsrc/common/vprintf.c b/libsrc/common/vprintf.c
deleted file mode 100644 (file)
index 7ad77b3..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * vprintf.c
- *
- * Ullrich von Bassewitz, 11.08.1998
- */
-
-
-
-#include <stdarg.h>
-#include <stdio.h>
-#include "_printf.h"
-
-
-
-int vprintf (const char* format, va_list ap)
-{
-    return vfprintf (stdout, format, ap);
-}
-
-
-
diff --git a/libsrc/common/vprintf.s b/libsrc/common/vprintf.s
new file mode 100644 (file)
index 0000000..99e8018
--- /dev/null
@@ -0,0 +1,51 @@
+;
+; Ullrich von Bassewitz, 2003-06-02
+;
+; int __fastcall__ vprintf (const char* format, va_list ap);
+;
+
+       .export         _vprintf
+        .import         _vfprintf, _stdout
+       .import         decsp2
+       .importzp       sp
+
+
+.proc   _vprintf
+
+; Save A which contains the low part of ap
+
+        pha
+
+; Allocate one more word on the stack
+
+        jsr     decsp2
+
+; Move the format parameter down and store stdout in it's place
+
+        ldy     #2
+        lda     (sp),y
+        ldy     #0
+        sta     (sp),y
+        ldy     #3
+        lda     (sp),y
+        ldy     #1
+        sta     (sp),y
+
+        iny
+        lda     _stdout
+        sta     (sp),y
+        iny
+        lda     _stdout+1
+        sta     (sp),y
+
+; Restore A
+
+        pla
+
+; Call vfprintf (stdout, format, ap) which will cleanup the stack and return
+
+        jmp     _vfprintf
+
+.endproc
+
+