remove assembler interface to xprintf()

This commit is contained in:
Markus Fröschle
2016-11-07 10:55:00 +00:00
parent e67057c21e
commit 0ed03ee328
8 changed files with 965 additions and 996 deletions

View File

@@ -189,7 +189,6 @@ sys/startcf.S
sys/exceptions.S sys/exceptions.S
util/bas_printf.c util/bas_printf.c
util/bas_string.c util/bas_string.c
util/printf_helper.S
util/wait.c util/wait.c
bas.lk.in bas.lk.in
i2c/i2c.c i2c/i2c.c
@@ -532,7 +531,6 @@ usb/usb_mouse.c
util/bas_printf.c util/bas_printf.c
util/bas_string.c util/bas_string.c
util/libgcc_helper.S util/libgcc_helper.S
util/printf_helper.S
util/setjmp.S util/setjmp.S
util/wait.c util/wait.c
video/fbmem.c video/fbmem.c

View File

@@ -4,6 +4,9 @@ tos/pci_test/include
/usr/m68k-atari-mint/include /usr/m68k-atari-mint/include
/opt/cross-mint/m68k-atari-mint/include /opt/cross-mint/m68k-atari-mint/include
/opt/gygwin/opt/cross-mint/m68k-atari-mint/include /opt/gygwin/opt/cross-mint/m68k-atari-mint/include
/opt/m68k-elf/include
/opt/cygwin/opt/m68k-elf/include
/opt/cygwin/opt/m68k-elf/lib/gcc/m68k-elf/4.6.4/include
dma dma
m54455 m54455
sys sys

View File

@@ -8,6 +8,14 @@
# installation, but allows source level debugging over BDM with a recent gdb (tested with 7.5), # installation, but allows source level debugging over BDM with a recent gdb (tested with 7.5),
# the m68k BDM tools from sourceforge (http://bdm.sourceforge.net) and a BDM pod (TBLCF and P&E tested). # the m68k BDM tools from sourceforge (http://bdm.sourceforge.net) and a BDM pod (TBLCF and P&E tested).
VERBOSE=N
ifneq (Y,$(VERBOSE))
Q=@
else
Q=
endif
# can be either "Y" or "N" (without quotes). "Y" for using the m68k-elf-, "N" for using the m68k-atari-mint # can be either "Y" or "N" (without quotes). "Y" for using the m68k-elf-, "N" for using the m68k-atari-mint
# toolchain # toolchain
COMPILE_ELF=Y COMPILE_ELF=Y
@@ -155,7 +163,6 @@ CSRCS= \
ASRCS= \ ASRCS= \
startcf.S \ startcf.S \
printf_helper.S \
exceptions.S \ exceptions.S \
setjmp.S \ setjmp.S \
xhdi_vec.S \ xhdi_vec.S \
@@ -183,17 +190,18 @@ lib: $(LIBS)
.PHONY: ver .PHONY: ver
ver: ver:
touch include/version.h touch include/version.h
.PHONY: tos .PHONY: tos
tos: tos:
@(cd tos; $(MAKE) -s) $(Q)(cd tos; $(MAKE) -s)
.PHONY: clean .PHONY: clean
clean: clean:
@for d in $(TRGTDIRS);\ $(Q)for d in $(TRGTDIRS);\
do rm -f $$d/*.map $$d/*.s19 $$d/*.elf $$d/*.lk $$d/*.a $$d/objs/* $$d/depend;\ do rm -f $$d/*.map $$d/*.s19 $$d/*.elf $$d/*.lk $$d/*.a $$d/objs/* $$d/depend;\
done done
@rm -f tags $(Q)rm -f tags
@(cd tos; make -s clean) $(Q)(cd tos; make -s clean)
@@ -227,12 +235,12 @@ firebee/basflash.$(EXE): CFLAGS += -mcpu=5474
# #
define CC_TEMPLATE define CC_TEMPLATE
$(1)/objs/%.o:%.c $(1)/objs/%.o:%.c
@echo CC $$< $(Q)echo CC $$<
@$(CC) $$(CFLAGS) -D$$(MACHINE) $(INCLUDE) -c $$< -o $$@ $(Q)$(CC) $$(CFLAGS) -D$$(MACHINE) $(INCLUDE) -c $$< -o $$@
$(1)/objs/%.o:%.S $(1)/objs/%.o:%.S
@echo CC $$< $(Q)echo CC $$<
@$(CC) $$(CFLAGS) -Wa,--bitwise-or -D$$(MACHINE) $(INCLUDE) -c $$< -o $$@ $(Q)$(CC) $$(CFLAGS) -Wa,--bitwise-or -D$$(MACHINE) $(INCLUDE) -c $$< -o $$@
endef endef
$(foreach DIR,$(TRGTDIRS),$(eval $(call CC_TEMPLATE,$(DIR)))) $(foreach DIR,$(TRGTDIRS),$(eval $(call CC_TEMPLATE,$(DIR))))
@@ -248,8 +256,8 @@ else
MACHINE=MACHINE_M5484LITE MACHINE=MACHINE_M5484LITE
endif endif
$(1)/depend:$(SRCS) $(1)/depend:$(SRCS)
@echo DEPEND $(Q)echo DEPEND
@$(CC) $$(CFLAGS) -D$$(MACHINE) $(INCLUDE) -M $$^ | sed -e "s#^\(.*\).o:#"$(1)"/objs/\1.o:#" > $$@ $(Q)$(CC) $$(CFLAGS) -D$$(MACHINE) $(INCLUDE) -M $$^ | sed -e "s#^\(.*\).o:#"$(1)"/objs/\1.o:#" > $$@
endef endef
$(foreach DIR,$(TRGTDIRS),$(eval $(call DEP_TEMPLATE,$(DIR)))) $(foreach DIR,$(TRGTDIRS),$(eval $(call DEP_TEMPLATE,$(DIR))))
@@ -260,9 +268,9 @@ $(foreach DIR,$(TRGTDIRS),$(eval $(call DEP_TEMPLATE,$(DIR))))
define AR_TEMPLATE define AR_TEMPLATE
$(1)_OBJS=$(patsubst %,$(1)/objs/%,$(OBJS)) $(1)_OBJS=$(patsubst %,$(1)/objs/%,$(OBJS))
$(1)/$(LIBBAS): $$($(1)_OBJS) $(1)/$(LIBBAS): $$($(1)_OBJS)
@echo AR $$@ $(Q)echo AR $$@
@$(AR) r $$@ $$? $(Q)$(AR) r $$@ $$?
@$(RANLIB) $$@ $(Q)$(RANLIB) $$@
endef endef
$(foreach DIR,$(TRGTDIRS),$(eval $(call AR_TEMPLATE,$(DIR)))) $(foreach DIR,$(TRGTDIRS),$(eval $(call AR_TEMPLATE,$(DIR))))
@@ -274,8 +282,8 @@ endif
define LK_TEMPLATE define LK_TEMPLATE
$(1)/$$(LDCFILE): $(LDCSRC) $(1)/$$(LDCFILE): $(LDCSRC)
@echo CPP $$< $(Q)echo CPP $$<
@$(CPP) $(INCLUDE) -DOBJDIR=$(1)/objs -P -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $(LDCSRC) -o $(1)/$$(LDCFILE) $(Q)$(CPP) $(INCLUDE) -DOBJDIR=$(1)/objs -P -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $$< -o $$@
endef endef
$(foreach DIR,$(TRGTDIRS),$(eval $(call LK_TEMPLATE,$(DIR)))) $(foreach DIR,$(TRGTDIRS),$(eval $(call LK_TEMPLATE,$(DIR))))
@@ -286,44 +294,44 @@ define EX_TEMPLATE
# pattern rule for flash # pattern rule for flash
$(1)_MAPFILE=$(1)/$$(basename $$(FLASH_EXEC)).map $(1)_MAPFILE=$(1)/$$(basename $$(FLASH_EXEC)).map
$(1)/$$(FLASH_EXEC): $(1)/$(LIBBAS) $(1)/$$(LDCFILE) $(1)/$$(FLASH_EXEC): $(1)/$(LIBBAS) $(1)/$$(LDCFILE)
@echo CC $$@ $(Q)echo CC $$@
@$(CC) $$(CFLAGS) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDCFILE) $(LDLIBS) -o $$@ $(Q)$(CC) $$(CFLAGS) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDCFILE) $(LDLIBS) -o $$@
ifeq ($(COMPILE_ELF),Y) ifeq ($(COMPILE_ELF),Y)
@echo OBJCOPY $$@ $(Q)echo OBJCOPY $$@
@$(OBJCOPY) -O srec $$@ $$(basename $$@).s19 $(Q)$(OBJCOPY) -O srec $$@ $$(basename $$@).s19
else else
@echo OBJCOPY $$@ $(Q)echo OBJCOPY $$@
@objcopy -I srec -O elf32-big --alt-machine-code 4 $$@ $$(basename $$@).elf $(Q)objcopy -I srec -O elf32-big --alt-machine-code 4 $$@ $$(basename $$@).elf
endif endif
# pattern rule for RAM # pattern rule for RAM
$(1)_MAPFILE_RAM=$(1)/$$(basename $$(RAM_EXEC)).map $(1)_MAPFILE_RAM=$(1)/$$(basename $$(RAM_EXEC)).map
$(1)/$$(RAM_EXEC): $(1)/$(LIBBAS) $(1)/$$(LDCFILE) $(1)/$$(RAM_EXEC): $(1)/$(LIBBAS) $(1)/$$(LDCFILE)
@echo CPP $$@ $(Q)echo CPP $$@
@$(CPP) $(INCLUDE) -DCOMPILE_RAM -DOBJDIR=$(1)/objs -P -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $(LDCSRC) -o $(1)/$$(LDRFILE) $(Q)$(CPP) $(INCLUDE) -DCOMPILE_RAM -DOBJDIR=$(1)/objs -P -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $(LDCSRC) -o $(1)/$$(LDRFILE)
@echo CC $$@ $(Q)echo CC $$@
@$(CC) $$(CFLAGS) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE_RAM) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDRFILE) $(LDLIBS) -o $$@ $(Q)$(CC) $$(CFLAGS) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE_RAM) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDRFILE) $(LDLIBS) -o $$@
ifeq ($(COMPILE_ELF),Y) ifeq ($(COMPILE_ELF),Y)
@echo OBJCOPY $$@ $(Q)echo OBJCOPY $$@
@$(OBJCOPY) -O srec $$@ $$(basename $$@).s19 $(Q)$(OBJCOPY) -O srec $$@ $$(basename $$@).s19
else else
@echo OBJCOPY $$< $(Q)echo OBJCOPY $$<
@objcopy -I srec -O elf32-big --alt-machine-code 4 $$@ $$(basename $$@).elf $(Q)objcopy -I srec -O elf32-big --alt-machine-code 4 $$@ $$(basename $$@).elf
endif endif
# pattern rule for basflash # pattern rule for basflash
$(1)_MAPFILE_BFL=$(1)/$$(basename $$(BASFLASH_EXEC)).map $(1)_MAPFILE_BFL=$(1)/$$(basename $$(BASFLASH_EXEC)).map
$(1)/$$(BASFLASH_EXEC): $(1)/objs/basflash.o $(1)/objs/basflash_start.o $(1)/$(LIBBAS) $(LDCBFL) $(1)/$$(BASFLASH_EXEC): $(1)/objs/basflash.o $(1)/objs/basflash_start.o $(1)/$(LIBBAS) $(LDCBFL)
@echo CPP $$< $(Q)echo CPP $$<
$(CPP) $(INCLUDE) -P -DOBJDIR=$(1)/objs -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $(LDCBSRC) -o $(1)/$$(LDCBFS) $(CPP) $(INCLUDE) -P -DOBJDIR=$(1)/objs -DFORMAT_ELF=$(FORMAT_ELF) -D$$(MACHINE) $(LDCBSRC) -o $(1)/$$(LDCBFS)
@echo CC $$< $(Q)echo CC $$<
@$(CC) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE_BFL) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDCBFS) -L$(1) -lbas $(LDLIBS) -o $$@ $(Q)$(CC) -nostdlib -Wl,--oformat -Wl,$$(FORMAT) -Wl,-Map -Wl,$$($(1)_MAPFILE_BFL) -Wl,--cref -Wl,-T -Wl,$(1)/$$(LDCBFS) -L$(1) -lbas $(LDLIBS) -o $$@
ifeq ($(COMPILE_ELF),Y) ifeq ($(COMPILE_ELF),Y)
@echo OBJCOPY $$< $(Q)echo OBJCOPY $$<
@$(OBJCOPY) -O srec $$@ $$(basename $$@).s19 $(Q)$(OBJCOPY) -O srec $$@ $$(basename $$@).s19
else else
@echo OBJCOPY $$< $(Q)echo OBJCOPY $$<
@objcopy -I srec -O elf32-big --alt-machine-code 4 $$@ $$(basename $$@).elf $(Q)objcopy -I srec -O elf32-big --alt-machine-code 4 $$@ $$(basename $$@).elf
endif endif
endef endef
$(foreach DIR,$(TRGTDIRS),$(eval $(call EX_TEMPLATE,$(DIR)))) $(foreach DIR,$(TRGTDIRS),$(eval $(call EX_TEMPLATE,$(DIR))))
@@ -338,7 +346,7 @@ tags:
.PHONY: printvars .PHONY: printvars
printvars: printvars:
@$(foreach V,$(.VARIABLES), $(if $(filter-out environment% default automatic, $(origin $V)),$(warning $V=$($V)))) $(Q)$(foreach V,$(.VARIABLES), $(if $(filter-out environment% default automatic, $(origin $V)),$(warning $V=$($V))))
ifeq (MACHINE_M5484LITE,$$(MACHINE)) ifeq (MACHINE_M5484LITE,$$(MACHINE))
MNAME=m5484lite MNAME=m5484lite
else ifeq (MACHINE_FIREBEE,$(MACHINE)) else ifeq (MACHINE_FIREBEE,$(MACHINE))

View File

@@ -28,12 +28,14 @@
#include "ff.h" #include "ff.h"
#include "s19reader.h" #include "s19reader.h"
#ifdef MACHINE_FIREBEE #if defined(MACHINE_FIREBEE)
#include "firebee.h" #include "firebee.h"
#endif /* MACHINE_FIREBEE */ #elif defined(MACHINE_M5484LITE)
#ifdef MACHINE_M5484LITE
#include "m5484l.h" #include "m5484l.h"
#elif defined(MACHINE_M54455)
#include "m54455.h"
#else
error unknown machine!
#endif /* MACHINE_M5484LITE */ #endif /* MACHINE_M5484LITE */
#define AMD_FLASH_BUS_SHIFT 1 #define AMD_FLASH_BUS_SHIFT 1

View File

@@ -21,15 +21,24 @@
#define _BAS_PRINTF_H_ #define _BAS_PRINTF_H_
#include <stdarg.h> #include <stdarg.h>
#include <stddef.h> #include <stddef.h>
#include "MCF5475.h"
extern void xvsnprintf(char *str, size_t size, const char *fmt, va_list va); extern void xvsnprintf(char *str, size_t size, const char *fmt, va_list va);
extern void xvprintf(const char *fmt, va_list va); extern void xvprintf(const char *fmt, va_list va);
extern void xprintf(const char *fmt, ...); extern void xprintf(const char *fmt, ...);
extern void xsnprintf(char *str, size_t size, const char *fmt, ...); extern void xsnprintf(char *str, size_t size, const char *fmt, ...);
extern void xputchar(int c);
extern int sprintf(char *str, const char *format, ...); extern int sprintf(char *str, const char *format, ...);
extern void display_progress(void); extern void display_progress(void);
extern void hexdump(uint8_t buffer[], int size); extern void hexdump(uint8_t buffer[], int size);
static inline void xputchar(int c)
{
while (!(MCF_PSC0_PSCSR & MCF_PSC_PSCSR_TXRDY))
;
MCF_PSC0_PSCTB_8BIT = (uint8_t) c;
}
#endif /* _BAS_PRINTF_H_ */ #endif /* _BAS_PRINTF_H_ */

View File

@@ -22,8 +22,8 @@
* Author: mfro * Author: mfro
*/ */
#ifndef UTIL_H_ #ifndef _UTIL_H_
#define UTIL_H_ #define _UTIL_H_
#include <bas_types.h> #include <bas_types.h>

View File

@@ -59,19 +59,6 @@
static char snil[] = "(nil)"; static char snil[] = "(nil)";
void xputchar(int c)
{
__asm__ __volatile__
(
".extern printf_helper\n\t"
"move.b %0,d0\n\t"
"bsr printf_helper\n\t"
/* output */:
/* input */: "r" (c)
/* clobber */: "d0","d2","a0","memory"
);
}
static void doprnt(void (*addchar)(int), const char *sfmt, va_list ap) static void doprnt(void (*addchar)(int), const char *sfmt, va_list ap)
{ {
char buf[128]; char buf[128];

View File

@@ -1,38 +0,0 @@
/*
* printf_helper.S
*
* assembler trampoline to let printf (compiled -mpcrel) indirectly reference __MBAR
*
* This file is part of BaS_gcc.
*
* BaS_gcc 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 3 of the License, or
* (at your option) any later version.
*
* BaS_gcc 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 BaS_gcc. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2010 - 2012 F. Aschwanden
* Copyright 2011 - 2012 V. Riviere
* Copyright 2012 M. Froeschle
*/
.global printf_helper
printf_helper:
.extern __MBAR
.wait_txready:
move.w __MBAR+0x8604,d2 // PSCSCR0 status register
btst #10,d2 // space left in TX fifo?
beq.s .wait_txready // no, loop
lea __MBAR+0x860C,a0 // PSCSTB0 transmitter buffer register
move.b d0,(a0) // send byte
rts
// vim: set syntax=asm68k :