summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i960/i960sim/start
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-06-12 16:34:46 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-06-12 16:34:46 +0000
commit68c498f47761a00aee669aeb52a8e473c4d802ba (patch)
tree79d2517b87d95d739067c9b3764cc6f02496c649 /c/src/lib/libbsp/i960/i960sim/start
parentMerge lossage. Apparently the DOS/UNIX CRLF issue got lost. (diff)
downloadrtems-68c498f47761a00aee669aeb52a8e473c4d802ba.tar.bz2
Added i960sim BSP which (ignoring the 3 instructions not supported
by gdb 5.0's i960 simulator) is enough to run hello world.
Diffstat (limited to 'c/src/lib/libbsp/i960/i960sim/start')
-rw-r--r--c/src/lib/libbsp/i960/i960sim/start/.cvsignore2
-rw-r--r--c/src/lib/libbsp/i960/i960sim/start/Makefile.am32
-rw-r--r--c/src/lib/libbsp/i960/i960sim/start/start.c39
3 files changed, 73 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/i960/i960sim/start/.cvsignore b/c/src/lib/libbsp/i960/i960sim/start/.cvsignore
new file mode 100644
index 0000000000..282522db03
--- /dev/null
+++ b/c/src/lib/libbsp/i960/i960sim/start/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/c/src/lib/libbsp/i960/i960sim/start/Makefile.am b/c/src/lib/libbsp/i960/i960sim/start/Makefile.am
new file mode 100644
index 0000000000..c143631d84
--- /dev/null
+++ b/c/src/lib/libbsp/i960/i960sim/start/Makefile.am
@@ -0,0 +1,32 @@
+##
+## $Id$
+##
+
+AUTOMAKE_OPTIONS = foreign 1.4
+
+PGM = $(ARCH)/start.o
+
+C_FILES = start.c
+C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.o)
+
+OBJS = $(C_O_FILES)
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../../../../../../automake/lib.am
+
+#
+# (OPTIONAL) Add local stuff here using +=
+#
+
+$(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o: $(PGM)
+ $(INSTALL_DATA) $< $@
+
+TMPINSTALL_FILES += $(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o
+
+all-local: $(ARCH) $(OBJS) $(PGM) $(TMPINSTALL_FILES)
+
+.PRECIOUS: $(PGM)
+
+EXTRA_DIST = start.S
+
+include $(top_srcdir)/../../../../../../automake/local.am
diff --git a/c/src/lib/libbsp/i960/i960sim/start/start.c b/c/src/lib/libbsp/i960/i960sim/start/start.c
new file mode 100644
index 0000000000..590e3eb8ed
--- /dev/null
+++ b/c/src/lib/libbsp/i960/i960sim/start/start.c
@@ -0,0 +1,39 @@
+char *__env[1] = {0};
+char **environ = __env;
+
+#define ENABLE_TRACE_MASK 1
+#define STACK_ALIGN 64
+
+__inline static void
+init_Cregs (void)
+{
+ /* set register values gcc like */
+ register unsigned int mask0=0x3b001000;
+ register unsigned int mask1=0x00009107;
+ __asm__ volatile ("mov %0,g14"
+ : /* no output */
+ : "I" (0)); /* gnu structure pointer */
+ __asm__ volatile ("modac %1,%0,%0"
+ : /* no output */
+ : "d" (mask0),
+ "d" (mask1)); /* fpu control kb */
+}
+
+void _start(void)
+{
+ extern int stack_init;
+ register void *ptr = &stack_init;
+
+ /* enable tracing */
+ register int mask = ENABLE_TRACE_MASK;
+ __asm__ volatile ("modpc %0,%0,%0" : : "d" (mask));
+
+ /* SP must be 64 bytes larger than FP at start. */
+ __asm__ volatile ("mov %0,sp" : : "d" (ptr + STACK_ALIGN));
+ __asm__ volatile ("mov %0,fp" : : "d" (ptr));
+
+
+ init_Cregs();
+ boot_card();
+ _sys_exit(0);
+}