From 6eefd591c1cc234222d4afde485a7cda4819718e Mon Sep 17 00:00:00 2001 From: uz Date: Mon, 26 Nov 2012 16:28:46 +0000 Subject: [PATCH] Moved the string that contains the ascii representation of LONG_MIN into its own file. git-svn-id: svn://svn.cc65.org/cc65/trunk@5941 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/common/Makefile | 1 + libsrc/common/_longminstr.c | 15 +++++++++++++++ libsrc/common/ltoa.s | 11 ++++------- 3 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 libsrc/common/_longminstr.c diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index 83966a004..334521daf 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -42,6 +42,7 @@ CFLAGS = -Osir -g -T -t $(SYS) --forget-inc-paths -I . -I ../../include # From C source-files C_OBJS = _afailed.o \ _hextab.o \ + _longminstr.o \ _poserror.o \ _scanf.o \ abort.o \ diff --git a/libsrc/common/_longminstr.c b/libsrc/common/_longminstr.c new file mode 100644 index 000000000..290c7f155 --- /dev/null +++ b/libsrc/common/_longminstr.c @@ -0,0 +1,15 @@ +/* + * Ullrich von Bassewitz, 2012-11-26 + * + * Minimum value of a long. Is used in ascii conversions, since this value + * has no positive counterpart than can be represented in 32 bits. In C, + * since the compiler will convert to the correct character set for the + * target platform. + */ + + + +const unsigned char _longminstr[] = "-2147483648"; + + + diff --git a/libsrc/common/ltoa.s b/libsrc/common/ltoa.s index c0a342056..65d6ca420 100644 --- a/libsrc/common/ltoa.s +++ b/libsrc/common/ltoa.s @@ -7,20 +7,17 @@ .export _ltoa, _ultoa .import popax - .import __hextab + .import __hextab, __longminstr .importzp sreg, ptr1, ptr2, ptr3, tmp1 -.rodata -specval: - .byte '-', '2', '1', '4', '7', '4', '8', '3', '6', '4', '8', 0 .code ; ; Common subroutine to pop the parameters and put them into core ; - + dopop: sta tmp1 ; will loose high byte jsr popax ; get s sta ptr1 @@ -56,12 +53,12 @@ _ltoa: jsr dopop ; pop the arguments bne L2 ldy #11 -L1: lda specval,y ; copy -2147483648 +L1: lda __longminstr,y ; copy -2147483648 sta (ptr1),y dey bpl L1 jmp L10 - + ; Check if the value is negative. If so, write a - sign and negate the ; number. -- 2.39.5