]> git.sur5r.net Git - cc65/commitdiff
Rewrote cprintf() in assembler
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 1 Dec 2000 15:13:07 +0000 (15:13 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 1 Dec 2000 15:13:07 +0000 (15:13 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@512 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/.cvsignore
libsrc/common/Makefile
libsrc/common/cprintf.c [deleted file]
libsrc/common/cprintf.s [new file with mode: 0644]

index a106748185cac89fde7b316616ae07c678148b3c..53109108ebd883532beda0075a845ca1dcc43c51 100644 (file)
@@ -5,7 +5,6 @@ _hextab.s
 abort.s
 bsearch.s
 calloc.s
-cprintf.s
 errormsg.s
 fclose.s
 fdopen.s
index 2f45a2ac43cd5cd97245f3ca51bb13186d98592a..b00dd0837ea936d90c0d669d7738689c42dddfdd 100644 (file)
@@ -16,7 +16,7 @@ C_OBJS = fclose.o fgets.o fprintf.o calloc.o _fopen.o\
         _hextab.o fdopen.o strtok.o\
         _afailed.o fopen.o fgetc.o fputc.o puts.o gets.o perror.o getchar.o\
         vprintf.o vsprintf.o sprintf.o abort.o qsort.o putchar.o\
-        errormsg.o cprintf.o vcprintf.o freopen.o locale.o fsetpos.o\
+        errormsg.o vcprintf.o freopen.o locale.o fsetpos.o\
         fgetpos.o rewind.o fseek.o ftell.o
 
 S_OBJS =       _fdesc.o        \
@@ -32,6 +32,7 @@ S_OBJS =      _fdesc.o        \
                atexit.o        \
                atoi.o          \
                copydata.o      \
+               cprintf.o       \
                errno.o         \
                fmisc.o         \
                free.o          \
diff --git a/libsrc/common/cprintf.c b/libsrc/common/cprintf.c
deleted file mode 100644 (file)
index 4ce5691..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * cprintf.c
- *
- * Ullrich von Bassewitz. 11.08.1998
- */
-
-
-
-#include <stdarg.h>
-#include <conio.h>
-
-
-
-int cprintf (const char* format, ...)
-{
-    va_list ap;
-    va_start (ap, format);
-
-    /* Do formatting and output. Since we know, that va_end is empty, we don't
-     * call it here, saving an extra variable and some code.
-     */
-    return vcprintf ((char*) va_fix (ap, 1), ap);
-}
-
-
-
diff --git a/libsrc/common/cprintf.s b/libsrc/common/cprintf.s
new file mode 100644 (file)
index 0000000..0beba09
--- /dev/null
@@ -0,0 +1,65 @@
+;
+; int cprintf (const char* Format, ...);
+;
+; Ullrich von Bassewitz, 1.12.2000
+;
+
+               .export         _cprintf
+               .import         pushax, addysp, _vcprintf
+       .importzp       sp, ptr1
+
+       .macpack        generic
+
+; ----------------------------------------------------------------------------
+; Data
+
+.bss
+
+ParamSize:     .res    1               ; Number of parameter bytes
+
+; ----------------------------------------------------------------------------
+; Code
+
+.code
+
+
+_cprintf:
+       sty     ParamSize               ; Number of param bytes passed in Y
+
+; Calculate a pointer that points to Format
+
+       dey
+       dey                             ; Sub size of Format
+       tya
+       add     sp
+       sta     ptr1
+       ldx     sp+1
+       bcc     @L1
+       inx
+@L1:   stx     ptr1+1
+
+; Push Format
+
+       ldy     #1
+       lda     (ptr1),y
+       tax
+       dey
+       lda     (ptr1),y
+       jsr     pushax
+
+; Push va_list (last parameter to vcprintf)
+
+       lda     ptr1
+       ldx     ptr1+1
+       jsr     pushax
+
+; Call vcprintf
+
+       jsr     _vcprintf
+
+; Cleanup the stack. We will return what we got from vcprintf
+
+       ldy     ParamSize
+       jmp     addysp
+
+