From aa10775c66928fcf8eef3d987a7cb9e9d341ed8a Mon Sep 17 00:00:00 2001 From: cuz Date: Fri, 1 Dec 2000 15:13:07 +0000 Subject: [PATCH] Rewrote cprintf() in assembler git-svn-id: svn://svn.cc65.org/cc65/trunk@512 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/common/.cvsignore | 1 - libsrc/common/Makefile | 3 +- libsrc/common/cprintf.c | 26 ---------------- libsrc/common/cprintf.s | 65 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 28 deletions(-) delete mode 100644 libsrc/common/cprintf.c create mode 100644 libsrc/common/cprintf.s diff --git a/libsrc/common/.cvsignore b/libsrc/common/.cvsignore index a10674818..53109108e 100644 --- a/libsrc/common/.cvsignore +++ b/libsrc/common/.cvsignore @@ -5,7 +5,6 @@ _hextab.s abort.s bsearch.s calloc.s -cprintf.s errormsg.s fclose.s fdopen.s diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index 2f45a2ac4..b00dd0837 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -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 index 4ce56917b..000000000 --- a/libsrc/common/cprintf.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * cprintf.c - * - * Ullrich von Bassewitz. 11.08.1998 - */ - - - -#include -#include - - - -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 index 000000000..0beba092a --- /dev/null +++ b/libsrc/common/cprintf.s @@ -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 + +