summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sh/gensh2/start/start.ram
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/sh/gensh2/start/start.ram')
-rw-r--r--c/src/lib/libbsp/sh/gensh2/start/start.ram199
1 files changed, 199 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sh/gensh2/start/start.ram b/c/src/lib/libbsp/sh/gensh2/start/start.ram
new file mode 100644
index 0000000000..1bbcc9daf2
--- /dev/null
+++ b/c/src/lib/libbsp/sh/gensh2/start/start.ram
@@ -0,0 +1,199 @@
+/*
+ * Authors: Ralf Corsepius (corsepiu@faw.uni-ulm.de) and
+ * Bernd Becker (becker@faw.uni-ulm.de)
+ *
+ * COPYRIGHT (c) 1997-1998, FAW Ulm, Germany
+ *
+ * This program 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.
+ *
+ *
+ * COPYRIGHT (c) 1998.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * Modified to reflect Hitachi EDK SH7045F:
+ * John M. Mills (jmills@tga.com)
+ * TGA Technologies, Inc.
+ * 100 Pinnacle Way, Suite 140
+ * Norcross, GA 30071 U.S.A.
+ *
+ *
+ * This modified file may be copied and distributed in accordance
+ * the above-referenced license. It is provided for critique and
+ * developmental purposes without any warranty nor representation
+ * by the authors or by TGA Technologies.
+ *
+ * $Id$
+ */
+
+#include "asm.h"
+
+ BEGIN_CODE
+ PUBLIC(start)
+
+SYM (start):
+ ! install the stack pointer
+ mov.l stack_k,r15
+
+#ifdef START_HW_INIT /* from $RTEMS_BSP.cfg */
+ ! Initialize minimal hardware
+ mov.l hw_init_k, r0
+ jsr @r0
+ nop !debug dead-slot target
+#endif /* START_HW_INIT */
+
+ ! zero out bss
+ mov.l edata_k,r0
+ mov.l end_k,r1
+ mov #0,r2
+0:
+ mov.l r2,@r0
+ add #4,r0
+ cmp/ge r0,r1
+ bt 0b
+ nop !debug dead-slot target
+
+ ! copy the vector table from rom to ram
+ mov.l vects_k,r0 ! vectab
+ mov #0,r1 ! address of boot vector table
+ mov #0,r2 ! number of bytes copied
+ mov.w vects_size,r3 ! size of entries in vectab
+1:
+ mov.l @r1+,r4
+ mov.l r4,@r0
+ add #4,r0
+ add #1,r2
+ cmp/hi r3,r2
+ bf 1b
+ nop !debug dead-slot target
+
+ ! overlay monitor vectors onto RTEMS table template
+ ! code adapted from Hitachi EDK7045F User Manual: "Copyvect.s"
+ mova vects_k,r0
+ mov.l @r0, r1 ! Shadow vect tbl addr
+ stc vbr, r2 ! Original vect tbl addr
+ and #0, r0
+ mov r0, r4 ! 0 in r4 and r0
+
+!trapa #32
+ or #0x80, r0
+ mov.l @(r0,r2), r3
+ mov.l r3, @(r0, r1)
+ mov r4, r0
+
+!cpu addr err
+ or #0x24, r0
+ mov.l @(r0, r2), r3
+ mov.l r3, @(r0, r1)
+ mov r4, r0
+
+!ill slot
+ or #0x18, r0
+ mov.l @(r0, r2), r3
+ mov.l r3, @(r0, r1)
+ mov r4, r0
+
+!ill inst
+ or #0x10, r0
+ mov.l @(r0, r2), r3
+ mov.l r3, @(r0, r1)
+ mov r4, r0
+
+!nmi
+ or #0x2c, r0
+ mov.l @(r0, r2), r3
+ mov.l r3, @(r0, r1)
+ mov r4, r0
+
+!User brk
+ or #0x30, r0
+ mov.l @(r0, r2), r3
+ mov.l r3, @(r0, r1)
+ mov r4, r0
+
+!sci0 err
+ or #0x80, r0
+ rotl r0
+ rotl r0
+ mov.l @(r0, r2), r3
+ mov.l r3, @(r0, r1)
+ mov r4, r0
+!sci rx
+ or #0x81, r0
+ rotl r0
+ rotl r0
+ mov.l @(r0, r2), r3
+ mov.l r3, @(r0, r1)
+
+ stc vbr,r3 ! capture copy of monitor vbr
+ mov.l vbrtemp_k,r0
+ mov.l r3, @r0
+ mov.l vects_k,r0 ! point vbr to vectab
+ ldc r0,vbr
+
+ ! call the mainline
+ mov #0,r4 ! argc
+ mov #0,r5 ! argv - can place in dead slot
+ mov.l main_k,r0
+ jsr @r0
+ nop !debug dead-slot target
+
+ ! call exit
+ mov r0,r4
+ mov.l exit_k,r0
+ or r0,r0
+ jsr @r0
+ nop !debug dead-slot target
+
+ mov.l vbrtemp_k,r0 ! restore original vbr
+ mov.l @r0,r3
+ ldc r3, vbr
+ trapa #13 ! UBR capture by monitor
+ nop !debug dead-slot target
+
+ END_CODE
+
+ .align 2
+stack_k:
+ .long SYM(stack)
+edata_k:
+ .long SYM(edata)
+end_k:
+ .long SYM(end)
+main_k:
+ .long SYM(boot_card)
+exit_k:
+ .long SYM(exit)
+#ifdef START_HW_INIT /* from $RTEMS_BSP.cfg */
+hw_init_k:
+ .long SYM(hw_initialize)
+#endif /* START_HW_INIT */
+vbrtemp_k:
+ .long SYM(vbrtemp)
+vects_k:
+ .long SYM(vectab)
+vects_size:
+ .word 255
+
+#ifdef __ELF__
+ .section .stack,"aw"
+#else
+ .section .stack
+#endif
+SYM(stack):
+ .long 0xdeaddead
+
+#ifdef __ELF__
+ .section .bss,"aw"
+#else
+ .section .bss
+#endif
+SYM(vbrtemp):
+ .long 0x0
+