remove assembler interface to xprintf()
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -49,7 +51,7 @@ struct amd_flash_sector_info
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AM29LV640D flash layout (bottom boot as used in the Firebee )
|
* AM29LV640D flash layout (bottom boot as used in the Firebee)
|
||||||
*/
|
*/
|
||||||
static struct amd_flash_sector_info sector[] =
|
static struct amd_flash_sector_info sector[] =
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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_ */
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
@@ -118,10 +118,10 @@ __extension__ \
|
|||||||
#define regsafe_call(addr) \
|
#define regsafe_call(addr) \
|
||||||
__extension__ \
|
__extension__ \
|
||||||
({__asm__ volatile ("lea -60(sp),sp\n\t" \
|
({__asm__ volatile ("lea -60(sp),sp\n\t" \
|
||||||
"movem.l d0-d7/a0-a6,(sp)"); \
|
"movem.l d0-d7/a0-a6,(sp)"); \
|
||||||
((void (*) (void)) addr)(); \
|
((void (*) (void)) addr)(); \
|
||||||
__asm__ volatile ("movem.l (sp),d0-d7/a0-a6\n\t" \
|
__asm__ volatile ("movem.l (sp),d0-d7/a0-a6\n\t" \
|
||||||
"lea 60(sp),sp"); \
|
"lea 60(sp),sp"); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
@@ -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 :
|
|
||||||
Reference in New Issue
Block a user