diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /device/lib/pdk15 | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'device/lib/pdk15')
| -rw-r--r-- | device/lib/pdk15/Makefile | 108 | ||||
| -rw-r--r-- | device/lib/pdk15/Makefile.in | 108 | ||||
| -rw-r--r-- | device/lib/pdk15/__gptrget.s | 53 | ||||
| -rw-r--r-- | device/lib/pdk15/__gptrget2.s | 74 | ||||
| -rw-r--r-- | device/lib/pdk15/__setjmp.s | 93 | ||||
| -rw-r--r-- | device/lib/pdk15/heap.s | 41 |
6 files changed, 477 insertions, 0 deletions
diff --git a/device/lib/pdk15/Makefile b/device/lib/pdk15/Makefile new file mode 100644 index 0000000..c6e1246 --- /dev/null +++ b/device/lib/pdk15/Makefile @@ -0,0 +1,108 @@ +# libc/pdk15 Makefile + + +srcdir = . +top_builddir = ../../.. + +LIB_TYPE = RANLIB + +SCC = $(top_builddir)/bin/sdcc -mpdk15 +SAS = $(top_builddir)/bin/sdaspdk15 + +# override PORTDIR defined by super (parent) makefile +override PORTDIR = ../build/pdk15 + +include $(srcdir)/../incl.mk + +PDK15_FLOAT = $(COMMON_FLOAT) + +PDK15_INT = $(COMMON_INT) \ + _muluchar.c \ + _mulschar.c \ + _mulint.c \ + _divuchar.c \ + _divschar.c \ + _divuint.c \ + _divsint.c \ + _moduchar.c \ + _modschar.c \ + _moduint.c \ + _modsint.c + +PDK15_LONG = $(COMMON_LONG) \ + _divulong.c \ + _mullong.c + +PDK15_LONGLONG = $(COMMON_LONGLONG) \ + _rrulonglong.c \ + _rrslonglong.c \ + _rlulonglong.c \ + _rlslonglong.c \ + _mullonglong.c \ + _divslonglong.c \ + _divulonglong.c \ + _modslonglong.c \ + _modulonglong.c + +PDK15_SDCC = $(COMMON_SDCC) \ + _itoa.c \ + _startup.c \ + _strcmp.c \ + _strcpy.c \ + _strlen.c \ + _memmove.c \ + __memcpy.c \ + memcpy.c \ + sprintf.c \ + vprintf.c + +PDK15SOURCES = $(addprefix ../,$(PDK15_FLOAT) $(PDK15_INT) $(PDK15_LONG) $(PDK15_LONGLONG) $(PDK15_SDCC)) +PDK15OBJECTS = $(patsubst %.c,%.rel,$(PDK15_FLOAT) $(PDK15_INT) $(PDK15_LONG) $(PDK15_LONGLONG) $(PDK15_SDCC)) + +OBJ = __gptrget.rel __gptrget2.rel heap.rel __setjmp.rel + +LIB = pdk15.lib +CC = $(SCC) +AS = $(SAS) +ASFLAGS = -plosgff + +CFLAGS = -I$(srcdir)/../../include -I. --std-c11 + +all: $(PORTDIR)/$(LIB) + +$(PORTDIR)/$(LIB): $(OBJ) $(PDK15OBJECTS) Makefile +ifeq ($(LIB_TYPE), SDCCLIB) + rm -f $@; \ + $(top_builddir)/bin/sdcclib -a $@ $(OBJ) $(PDK15OBJECTS) +else + ifeq ($(LIB_TYPE), AR) + $(top_builddir)/bin/sdar -rcSD $@ $(OBJ) $(PDK15OBJECTS) + else + ifeq ($(LIB_TYPE), RANLIB) + $(top_builddir)/bin/sdar -rcD $@ $(OBJ) $(PDK15OBJECTS) + else + rm -f $@ + for i in $(basename $(OBJ) $(PDK15OBJECTS)); do echo $$i >>$@; done + cp $(OBJ) $(PDK15OBJECTS) $(PORTDIR) + endif + endif +endif + +%.rel: %.c + $(CC) $(CFLAGS) -c $< + +%.rel: %.s + @# TODO: sdas should place it\'s output in the current dir + test $(srcdir) = . || cp $< . + -$(AS) $(ASFLAGS) $(notdir $<) + test $(srcdir) = . || rm $(notdir $<) + +%.rel: ../%.c + $(CC) $(CFLAGS) -c $< + +clean: + rm -f *.rel *.sym *.lst *~ $(CLEANSPEC) *.dump* *.asm *.lib + +distclean: clean + rm -f Makefile + diff --git a/device/lib/pdk15/Makefile.in b/device/lib/pdk15/Makefile.in new file mode 100644 index 0000000..bc4dcef --- /dev/null +++ b/device/lib/pdk15/Makefile.in @@ -0,0 +1,108 @@ +# libc/pdk15 Makefile + +VPATH = @srcdir@ +srcdir = @srcdir@ +top_builddir = @top_builddir@ + +LIB_TYPE = @LIB_TYPE@ + +SCC = $(top_builddir)/bin/sdcc -mpdk15 +SAS = $(top_builddir)/bin/sdaspdk15 + +# override PORTDIR defined by super (parent) makefile +override PORTDIR = ../build/pdk15 + +include $(srcdir)/../incl.mk + +PDK15_FLOAT = $(COMMON_FLOAT) + +PDK15_INT = $(COMMON_INT) \ + _muluchar.c \ + _mulschar.c \ + _mulint.c \ + _divuchar.c \ + _divschar.c \ + _divuint.c \ + _divsint.c \ + _moduchar.c \ + _modschar.c \ + _moduint.c \ + _modsint.c + +PDK15_LONG = $(COMMON_LONG) \ + _divulong.c \ + _mullong.c + +PDK15_LONGLONG = $(COMMON_LONGLONG) \ + _rrulonglong.c \ + _rrslonglong.c \ + _rlulonglong.c \ + _rlslonglong.c \ + _mullonglong.c \ + _divslonglong.c \ + _divulonglong.c \ + _modslonglong.c \ + _modulonglong.c + +PDK15_SDCC = $(COMMON_SDCC) \ + _itoa.c \ + _startup.c \ + _strcmp.c \ + _strcpy.c \ + _strlen.c \ + _memmove.c \ + __memcpy.c \ + memcpy.c \ + sprintf.c \ + vprintf.c + +PDK15SOURCES = $(addprefix ../,$(PDK15_FLOAT) $(PDK15_INT) $(PDK15_LONG) $(PDK15_LONGLONG) $(PDK15_SDCC)) +PDK15OBJECTS = $(patsubst %.c,%.rel,$(PDK15_FLOAT) $(PDK15_INT) $(PDK15_LONG) $(PDK15_LONGLONG) $(PDK15_SDCC)) + +OBJ = __gptrget.rel __gptrget2.rel heap.rel __setjmp.rel + +LIB = pdk15.lib +CC = $(SCC) +AS = $(SAS) +ASFLAGS = -plosgff + +CFLAGS = -I$(srcdir)/../../include -I. --std-c11 + +all: $(PORTDIR)/$(LIB) + +$(PORTDIR)/$(LIB): $(OBJ) $(PDK15OBJECTS) Makefile +ifeq ($(LIB_TYPE), SDCCLIB) + rm -f $@; \ + $(top_builddir)/bin/sdcclib -a $@ $(OBJ) $(PDK15OBJECTS) +else + ifeq ($(LIB_TYPE), AR) + $(top_builddir)/bin/sdar -rcSD $@ $(OBJ) $(PDK15OBJECTS) + else + ifeq ($(LIB_TYPE), RANLIB) + $(top_builddir)/bin/sdar -rcD $@ $(OBJ) $(PDK15OBJECTS) + else + rm -f $@ + for i in $(basename $(OBJ) $(PDK15OBJECTS)); do echo $$i >>$@; done + cp $(OBJ) $(PDK15OBJECTS) $(PORTDIR) + endif + endif +endif + +%.rel: %.c + $(CC) $(CFLAGS) -c $< + +%.rel: %.s + @# TODO: sdas should place it\'s output in the current dir + test $(srcdir) = . || cp $< . + -$(AS) $(ASFLAGS) $(notdir $<) + test $(srcdir) = . || rm $(notdir $<) + +%.rel: ../%.c + $(CC) $(CFLAGS) -c $< + +clean: + rm -f *.rel *.sym *.lst *~ $(CLEANSPEC) *.dump* *.asm *.lib + +distclean: clean + rm -f Makefile + diff --git a/device/lib/pdk15/__gptrget.s b/device/lib/pdk15/__gptrget.s new file mode 100644 index 0000000..a60a278 --- /dev/null +++ b/device/lib/pdk15/__gptrget.s @@ -0,0 +1,53 @@ +;-------------------------------------------------------------------------- +; __gptrget.s - read from pointer +; +; Copyright (c) 2019, Philipp Klaus Krause +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + +.module __gptrget +.area CODE + +__gptrget:: + sub a, #0x80 + t1sn f, c + goto code + + ; Pointer to RAM + idxm a, p + ret + + ; Pointer to ROM +code: + ; Put pointer on stack + xch a, p + push af ; Put lower byte of pointer on stack. + mov a, sp + add a, #-1 + xch a, p + idxm p, a ; Put upper byte of pointer on stack. + + ; Jump to it. ret there will return from the call to __gprtget + ret + diff --git a/device/lib/pdk15/__gptrget2.s b/device/lib/pdk15/__gptrget2.s new file mode 100644 index 0000000..d326795 --- /dev/null +++ b/device/lib/pdk15/__gptrget2.s @@ -0,0 +1,74 @@ +;-------------------------------------------------------------------------- +; __gptrget.s - read from pointer +; +; Copyright (c) 2019, Philipp Klaus Krause +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + +.module __gptrget2 +.area CODE + +__gptrget2:: + sub a, #0x80 + t1sn f, c + goto code + + ; Pointer to RAM + idxm a, p + push af + inc p + idxm a, p + mov p, a + pop af + ret + + ; Pointer to ROM +code: + xch a, p + push af ; Put lower byte of pointer to first byte of value on stack. + call code2 ; Put return value for the ret at second byte of value on stack. + + mov p, a + ; Jump to lower byte. ret there will return from the call to __gptrget2 + ret + +code2: + add a, #1 + push af ; Put lower byte of pointer to second byte of value on stack. + mov a, sp + add a, #-5 + xch a, p + idxm p, a ; Put upper byte of pointer to first byte of value on stack. + pop af + push af + idxm a, p + addc a + xch a, p + add a, #4 + xch a, p + idxm p, a ; Put lower byte of pointer to second byte of value on stack. + + ; Jump to upper byte. ret there will return from the call to code2 + ret + diff --git a/device/lib/pdk15/__setjmp.s b/device/lib/pdk15/__setjmp.s new file mode 100644 index 0000000..277cbaa --- /dev/null +++ b/device/lib/pdk15/__setjmp.s @@ -0,0 +1,93 @@ +;-------------------------------------------------------------------------- +; __setjmp.s +; +; Copyright (C) 2019, Philipp Klaus Krause +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .area DATA +___setjmp_PARM_1:: + .ds 2 +_longjmp_PARM_1:: + .ds 2 +_longjmp_PARM_2:: + .ds 2 + + .area CODE + +___setjmp:: + mov a, sp + add a, #-1 + mov p, a + idxm a, p + push af + dec p + idxm a, p + + xch a, p + mov a, ___setjmp_PARM_1+0 + xch a, p + + idxm p, a + inc p + pop af + idxm p, a + + inc p + mov a, sp + idxm p, a + clear p + ret #0 + +_longjmp:: + mov a, _longjmp_PARM_1+0 + add a, #2 + mov p, a + idxm a, p + add a, #-2 + mov sp, a + + dec p + dec p + idxm a, p + push af + inc p + idxm a, p + + xch a, p + mov a, sp + add a, #-1 + xch a, p + idxm p, a + + mov a, _longjmp_PARM_2+1 + mov p, a + mov a, _longjmp_PARM_2+0 + + ceqsn a, p + ret + ceqsn a, #0 + ret + ret #1 + diff --git a/device/lib/pdk15/heap.s b/device/lib/pdk15/heap.s new file mode 100644 index 0000000..f36c476 --- /dev/null +++ b/device/lib/pdk15/heap.s @@ -0,0 +1,41 @@ +;-------------------------------------------------------------------------- +; heap.s +; +; Copyright (C) 2014, Ben Shi +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + + .globl ___sdcc_heap_init + .globl ___sdcc_heap + .globl ___sdcc_heap_end + + .area GSINIT + call ___sdcc_heap_init + + .area DATA + ; For now just allocate 64 bytes for the heap. +___sdcc_heap:: + .ds 63 +___sdcc_heap_end:: + .ds 1 |
