summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i960/i960sim/start/start.c
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/start.c
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 '')
-rw-r--r--c/src/lib/libbsp/i960/i960sim/start/start.c39
1 files changed, 39 insertions, 0 deletions
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);
+}