summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k/efi332/start
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-10-12 12:56:07 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-10-12 12:56:07 +0000
commit50bb7627337aa780c4e8e6f3cbded85d2c80381b (patch)
tree0f6b313ab0e87a1471f42b4ee243130e5bf1b334 /c/src/lib/libbsp/m68k/efi332/start
parent2000-10-12 John S Gwynne <jgwynne@mrcday.com> (diff)
downloadrtems-50bb7627337aa780c4e8e6f3cbded85d2c80381b.tar.bz2
2000-10-12 John S Gwynne <jgwynne@mrcday.com>
* start/start.c: Modified to support generation of ram_init. * start/ram_init.ld, BSP/start/ram_init.sed: New files. These changes enable RTEMS to automatically generate the ram_init file used by gdb with the BDM patches. The 332 has on-board chip select lines (for RAM and FLASH) that must be configured before use of these peripherals. These patches parse data from start.c where the chip select lines are configured in the runtime executable and automatically generates the gdb initialization file using the same settings. A great time saver. A similar file, ram_init_FW (flash writable), is also generated that the flash programming tool uses. * start/Makefile.am: Modified to support above. * CPU/sim.h: Modified to support above. * startup/except_vect_332_ROM.S: Moved to start so it would not be included in libbsp.a. Moving it to start ensures it is available as a single object file. * start/except_vect_332_ROM.S: Moved from startup. * startup/linkcmds, startup/linkcmds_ROM: Fixes to the memory map shown in the comments.
Diffstat (limited to 'c/src/lib/libbsp/m68k/efi332/start')
-rw-r--r--c/src/lib/libbsp/m68k/efi332/start/Makefile.am38
-rw-r--r--c/src/lib/libbsp/m68k/efi332/start/except_vect_332_ROM.S290
-rw-r--r--c/src/lib/libbsp/m68k/efi332/start/ram_init.ld22
-rw-r--r--c/src/lib/libbsp/m68k/efi332/start/ram_init.sed47
-rw-r--r--c/src/lib/libbsp/m68k/efi332/start/start.c4
5 files changed, 397 insertions, 4 deletions
diff --git a/c/src/lib/libbsp/m68k/efi332/start/Makefile.am b/c/src/lib/libbsp/m68k/efi332/start/Makefile.am
index e827e0d79e..a310b4f1f2 100644
--- a/c/src/lib/libbsp/m68k/efi332/start/Makefile.am
+++ b/c/src/lib/libbsp/m68k/efi332/start/Makefile.am
@@ -22,12 +22,46 @@ include $(top_srcdir)/../../../../../../automake/lib.am
$(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o: $(PGM)
$(INSTALL_DATA) $< $@
-TMPINSTALL_FILES += $(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o
+$(PROJECT_RELEASE)/lib/except_vect_332_ROM$(LIB_VARIANT).o: \
+ $(ARCH)/except_vect_332_ROM.o
+ $(INSTALL_DATA) $< $@
+
+$(PROJECT_RELEASE)/lib/ram_init$(LIB_VARIANT): \
+ $(ARCH)/ram_init
+ $(INSTALL_DATA) $< $@
+
+$(PROJECT_RELEASE)/lib/ram_init_FW$(LIB_VARIANT): \
+ $(ARCH)/ram_init_FW
+ $(INSTALL_DATA) $< $@
+
+$(ARCH)/ram_init: $(srcdir)/start.c $(srcdir)/ram_init.ld \
+ $(srcdir)/ram_init.sed
+ sed -f $(srcdir)/ram_init.sed $(srcdir)/start.c >$(ARCH)/ram_init.S
+ $(CC) -D SIM_CRB=0x0000 -E $(ARCH)/ram_init.S >$(ARCH)/ram_init1.S
+ sed "/.org/ {N; s/\n/%/; P;}; /\.text/P; D;" $(ARCH)/ram_init1.S | \
+ sort | sed "h;1{s/.*/.data/;P;g;};s/%.*//;P;g;s/.*%//;" \
+ >$(ARCH)/ram_init2.S
+ $(CC) -nostdlib -Wl,-T$(srcdir)/ram_init.ld $(ARCH)/ram_init2.S \
+ -o $(ARCH)/ram_init
+
+$(ARCH)/ram_init_FW: $(srcdir)/ram_init.ld $(ARCH)/ram_init.S
+ $(CC) -D FLASHWRITE -D SIM_CRB=0x0000 -E $(ARCH)/ram_init.S \
+ >$(ARCH)/ram_init_FW1.S
+ sed "/.org/ {N; s/\n/%/; P;}; /\.text/P; D;" $(ARCH)/ram_init_FW1.S | \
+ sort | sed "h;1{s/.*/.data/;P;g;};s/%.*//;P;g;s/.*%//;" \
+ >$(ARCH)/ram_init_FW2.S
+ $(CC) -nostdlib -Wl,-T$(srcdir)/ram_init.ld $(ARCH)/ram_init_FW2.S \
+ -o $(ARCH)/ram_init_FW
+
+TMPINSTALL_FILES += $(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o \
+ $(PROJECT_RELEASE)/lib/ram_init$(LIB_VARIANT) \
+ $(PROJECT_RELEASE)/lib/ram_init_FW$(LIB_VARIANT) \
+ $(PROJECT_RELEASE)/lib/except_vect_332_ROM$(LIB_VARIANT).o
all-local: $(ARCH) $(OBJS) $(PGM) $(TMPINSTALL_FILES)
.PRECIOUS: $(PGM)
-EXTRA_DIST = start.c
+EXTRA_DIST = start.c except_vect_332_ROM.S ram_init.ld ram_init.sed
include $(top_srcdir)/../../../../../../automake/local.am
diff --git a/c/src/lib/libbsp/m68k/efi332/start/except_vect_332_ROM.S b/c/src/lib/libbsp/m68k/efi332/start/except_vect_332_ROM.S
new file mode 100644
index 0000000000..9eb2f20556
--- /dev/null
+++ b/c/src/lib/libbsp/m68k/efi332/start/except_vect_332_ROM.S
@@ -0,0 +1,290 @@
+/*
+ * $Id$
+ */
+
+/* Exception Vector definitions follow */
+
+ /* !!! Warning !!! This table is not tested, and
+ the user must make sure it is complete. */
+
+ /* If we use TRAP #15 for reboot, note that group 0 and 1 exceptions
+ will have priority. */
+
+ /* Vector 0: RESET: Initial SSP */
+ .long _RamEnd
+ /* Vector 1: RESET: Initial PC */
+ .long start
+
+ /* default action for undefined vectors is to re-boot */
+
+ /* Note group 0 and 1 exception (like trace) have priority
+ over other exceptions (like trap #15) that may call this. */
+
+ /* Vectors 2-255 */
+ .long reboot /* exception vector: 2 */
+ .long reboot /* exception vector: 3 */
+ .long reboot /* exception vector: 4 */
+ .long reboot /* exception vector: 5 */
+ .long reboot /* exception vector: 6 */
+ .long reboot /* exception vector: 7 */
+ .long reboot /* exception vector: 8 */
+ .long reboot /* exception vector: 9 */
+ .long reboot /* exception vector: 10 */
+ .long reboot /* exception vector: 11 */
+ .long reboot /* exception vector: 12 */
+ .long reboot /* exception vector: 13 */
+ .long reboot /* exception vector: 14 */
+ .long reboot /* exception vector: 15 */
+ .long reboot /* exception vector: 16 */
+ .long reboot /* exception vector: 17 */
+ .long reboot /* exception vector: 18 */
+ .long reboot /* exception vector: 19 */
+ .long reboot /* exception vector: 20 */
+ .long reboot /* exception vector: 21 */
+ .long reboot /* exception vector: 22 */
+ .long reboot /* exception vector: 23 */
+ .long reboot /* exception vector: 24 */
+ .long reboot /* exception vector: 25 */
+ .long reboot /* exception vector: 26 */
+ .long reboot /* exception vector: 27 */
+ .long reboot /* exception vector: 28 */
+ .long reboot /* exception vector: 29 */
+ .long reboot /* exception vector: 30 */
+ .long reboot /* exception vector: 31 */
+ .long reboot /* exception vector: 32 */
+ .long reboot /* exception vector: 33 */
+ .long reboot /* exception vector: 34 */
+ .long reboot /* exception vector: 35 */
+ .long reboot /* exception vector: 36 */
+ .long reboot /* exception vector: 37 */
+ .long reboot /* exception vector: 38 */
+ .long reboot /* exception vector: 39 */
+ .long reboot /* exception vector: 40 */
+ .long reboot /* exception vector: 41 */
+ .long reboot /* exception vector: 42 */
+ .long reboot /* exception vector: 43 */
+ .long reboot /* exception vector: 44 */
+ .long reboot /* exception vector: 45 */
+ .long reboot /* exception vector: 46 */
+ .long _reboot /* the reboot trap: 47 */
+ .long reboot /* exception vector: 48 */
+ .long reboot /* exception vector: 49 */
+ .long reboot /* exception vector: 50 */
+ .long reboot /* exception vector: 51 */
+ .long reboot /* exception vector: 52 */
+ .long reboot /* exception vector: 53 */
+ .long reboot /* exception vector: 54 */
+ .long reboot /* exception vector: 55 */
+ .long reboot /* exception vector: 56 */
+ .long reboot /* exception vector: 57 */
+ .long reboot /* exception vector: 58 */
+ .long reboot /* exception vector: 59 */
+ .long reboot /* exception vector: 60 */
+ .long reboot /* exception vector: 61 */
+ .long reboot /* exception vector: 62 */
+ .long reboot /* exception vector: 63 */
+ .long reboot /* exception vector: 64 */
+ .long reboot /* exception vector: 65 */
+ .long reboot /* exception vector: 66 */
+ .long reboot /* exception vector: 67 */
+ .long reboot /* exception vector: 68 */
+ .long reboot /* exception vector: 69 */
+ .long reboot /* exception vector: 70 */
+ .long reboot /* exception vector: 71 */
+ .long reboot /* exception vector: 72 */
+ .long reboot /* exception vector: 73 */
+ .long reboot /* exception vector: 74 */
+ .long reboot /* exception vector: 75 */
+ .long reboot /* exception vector: 76 */
+ .long reboot /* exception vector: 77 */
+ .long reboot /* exception vector: 78 */
+ .long reboot /* exception vector: 79 */
+ .long reboot /* exception vector: 80 */
+ .long reboot /* exception vector: 81 */
+ .long reboot /* exception vector: 82 */
+ .long reboot /* exception vector: 83 */
+ .long reboot /* exception vector: 84 */
+ .long reboot /* exception vector: 85 */
+ .long reboot /* exception vector: 86 */
+ .long reboot /* exception vector: 87 */
+ .long reboot /* exception vector: 88 */
+ .long reboot /* exception vector: 89 */
+ .long reboot /* exception vector: 90 */
+ .long reboot /* exception vector: 91 */
+ .long reboot /* exception vector: 92 */
+ .long reboot /* exception vector: 93 */
+ .long reboot /* exception vector: 94 */
+ .long reboot /* exception vector: 95 */
+ .long reboot /* exception vector: 96 */
+ .long reboot /* exception vector: 97 */
+ .long reboot /* exception vector: 98 */
+ .long reboot /* exception vector: 99 */
+ .long reboot /* exception vector: 100 */
+ .long reboot /* exception vector: 101 */
+ .long reboot /* exception vector: 102 */
+ .long reboot /* exception vector: 103 */
+ .long reboot /* exception vector: 104 */
+ .long reboot /* exception vector: 105 */
+ .long reboot /* exception vector: 106 */
+ .long reboot /* exception vector: 107 */
+ .long reboot /* exception vector: 108 */
+ .long reboot /* exception vector: 109 */
+ .long reboot /* exception vector: 110 */
+ .long reboot /* exception vector: 111 */
+ .long reboot /* exception vector: 112 */
+ .long reboot /* exception vector: 113 */
+ .long reboot /* exception vector: 114 */
+ .long reboot /* exception vector: 115 */
+ .long reboot /* exception vector: 116 */
+ .long reboot /* exception vector: 117 */
+ .long reboot /* exception vector: 118 */
+ .long reboot /* exception vector: 119 */
+ .long reboot /* exception vector: 120 */
+ .long reboot /* exception vector: 121 */
+ .long reboot /* exception vector: 122 */
+ .long reboot /* exception vector: 123 */
+ .long reboot /* exception vector: 124 */
+ .long reboot /* exception vector: 125 */
+ .long reboot /* exception vector: 126 */
+ .long reboot /* exception vector: 127 */
+ .long reboot /* exception vector: 128 */
+ .long reboot /* exception vector: 129 */
+ .long reboot /* exception vector: 130 */
+ .long reboot /* exception vector: 131 */
+ .long reboot /* exception vector: 132 */
+ .long reboot /* exception vector: 133 */
+ .long reboot /* exception vector: 134 */
+ .long reboot /* exception vector: 135 */
+ .long reboot /* exception vector: 136 */
+ .long reboot /* exception vector: 137 */
+ .long reboot /* exception vector: 138 */
+ .long reboot /* exception vector: 139 */
+ .long reboot /* exception vector: 140 */
+ .long reboot /* exception vector: 141 */
+ .long reboot /* exception vector: 142 */
+ .long reboot /* exception vector: 143 */
+ .long reboot /* exception vector: 144 */
+ .long reboot /* exception vector: 145 */
+ .long reboot /* exception vector: 146 */
+ .long reboot /* exception vector: 147 */
+ .long reboot /* exception vector: 148 */
+ .long reboot /* exception vector: 149 */
+ .long reboot /* exception vector: 150 */
+ .long reboot /* exception vector: 151 */
+ .long reboot /* exception vector: 152 */
+ .long reboot /* exception vector: 153 */
+ .long reboot /* exception vector: 154 */
+ .long reboot /* exception vector: 155 */
+ .long reboot /* exception vector: 156 */
+ .long reboot /* exception vector: 157 */
+ .long reboot /* exception vector: 158 */
+ .long reboot /* exception vector: 159 */
+ .long reboot /* exception vector: 160 */
+ .long reboot /* exception vector: 161 */
+ .long reboot /* exception vector: 162 */
+ .long reboot /* exception vector: 163 */
+ .long reboot /* exception vector: 164 */
+ .long reboot /* exception vector: 165 */
+ .long reboot /* exception vector: 166 */
+ .long reboot /* exception vector: 167 */
+ .long reboot /* exception vector: 168 */
+ .long reboot /* exception vector: 169 */
+ .long reboot /* exception vector: 170 */
+ .long reboot /* exception vector: 171 */
+ .long reboot /* exception vector: 172 */
+ .long reboot /* exception vector: 173 */
+ .long reboot /* exception vector: 174 */
+ .long reboot /* exception vector: 175 */
+ .long reboot /* exception vector: 176 */
+ .long reboot /* exception vector: 177 */
+ .long reboot /* exception vector: 178 */
+ .long reboot /* exception vector: 179 */
+ .long reboot /* exception vector: 180 */
+ .long reboot /* exception vector: 181 */
+ .long reboot /* exception vector: 182 */
+ .long reboot /* exception vector: 183 */
+ .long reboot /* exception vector: 184 */
+ .long reboot /* exception vector: 185 */
+ .long reboot /* exception vector: 186 */
+ .long reboot /* exception vector: 187 */
+ .long reboot /* exception vector: 188 */
+ .long reboot /* exception vector: 189 */
+ .long reboot /* exception vector: 190 */
+ .long reboot /* exception vector: 191 */
+ .long reboot /* exception vector: 192 */
+ .long reboot /* exception vector: 193 */
+ .long reboot /* exception vector: 194 */
+ .long reboot /* exception vector: 195 */
+ .long reboot /* exception vector: 196 */
+ .long reboot /* exception vector: 197 */
+ .long reboot /* exception vector: 198 */
+ .long reboot /* exception vector: 199 */
+ .long reboot /* exception vector: 200 */
+ .long reboot /* exception vector: 201 */
+ .long reboot /* exception vector: 202 */
+ .long reboot /* exception vector: 203 */
+ .long reboot /* exception vector: 204 */
+ .long reboot /* exception vector: 205 */
+ .long reboot /* exception vector: 206 */
+ .long reboot /* exception vector: 207 */
+ .long reboot /* exception vector: 208 */
+ .long reboot /* exception vector: 209 */
+ .long reboot /* exception vector: 210 */
+ .long reboot /* exception vector: 211 */
+ .long reboot /* exception vector: 212 */
+ .long reboot /* exception vector: 213 */
+ .long reboot /* exception vector: 214 */
+ .long reboot /* exception vector: 215 */
+ .long reboot /* exception vector: 216 */
+ .long reboot /* exception vector: 217 */
+ .long reboot /* exception vector: 218 */
+ .long reboot /* exception vector: 219 */
+ .long reboot /* exception vector: 220 */
+ .long reboot /* exception vector: 221 */
+ .long reboot /* exception vector: 222 */
+ .long reboot /* exception vector: 223 */
+ .long reboot /* exception vector: 224 */
+ .long reboot /* exception vector: 225 */
+ .long reboot /* exception vector: 226 */
+ .long reboot /* exception vector: 227 */
+ .long reboot /* exception vector: 228 */
+ .long reboot /* exception vector: 229 */
+ .long reboot /* exception vector: 230 */
+ .long reboot /* exception vector: 231 */
+ .long reboot /* exception vector: 232 */
+ .long reboot /* exception vector: 233 */
+ .long reboot /* exception vector: 234 */
+ .long reboot /* exception vector: 235 */
+ .long reboot /* exception vector: 236 */
+ .long reboot /* exception vector: 237 */
+ .long reboot /* exception vector: 238 */
+ .long reboot /* exception vector: 239 */
+ .long reboot /* exception vector: 240 */
+ .long reboot /* exception vector: 241 */
+ .long reboot /* exception vector: 242 */
+ .long reboot /* exception vector: 243 */
+ .long reboot /* exception vector: 244 */
+ .long reboot /* exception vector: 245 */
+ .long reboot /* exception vector: 246 */
+ .long reboot /* exception vector: 247 */
+ .long reboot /* exception vector: 248 */
+ .long reboot /* exception vector: 249 */
+ .long reboot /* exception vector: 250 */
+ .long reboot /* exception vector: 251 */
+ .long reboot /* exception vector: 252 */
+ .long reboot /* exception vector: 253 */
+ .long reboot /* exception vector: 254 */
+ .long reboot /* exception vector: 255 */
+
+
+_reboot:
+ move #0x2700,%sr /* mask interrupts */
+ movea.l (0x0).w,%a7 /* load stack */
+ movea.l (0x4).w,%a0 /* jmp to location of reset vector */
+ jmp (%a0)
+
+reboot:
+ trap #15 /* use trap exception to enter supervisor
+ state. Trace mode ( and other group 0
+ and 1 exceptions) *could* screw this up if
+ not vectored to reboot or did not return. */
diff --git a/c/src/lib/libbsp/m68k/efi332/start/ram_init.ld b/c/src/lib/libbsp/m68k/efi332/start/ram_init.ld
new file mode 100644
index 0000000000..d469431027
--- /dev/null
+++ b/c/src/lib/libbsp/m68k/efi332/start/ram_init.ld
@@ -0,0 +1,22 @@
+OUTPUT_ARCH(m68k)
+__DYNAMIC = 0;
+
+start = 0;
+
+MEMORY
+{
+ ram : ORIGIN = 0xfffa00, LENGTH = 256K
+}
+
+SECTIONS
+{
+ .text : {
+ *(.text)
+ } >ram
+ .data : {
+ *(.data)
+ } >ram
+ .bss : {
+ *(.bss)
+ } >ram
+}
diff --git a/c/src/lib/libbsp/m68k/efi332/start/ram_init.sed b/c/src/lib/libbsp/m68k/efi332/start/ram_init.sed
new file mode 100644
index 0000000000..ae664ca32d
--- /dev/null
+++ b/c/src/lib/libbsp/m68k/efi332/start/ram_init.sed
@@ -0,0 +1,47 @@
+1 {
+i\
+#include <efi332.h>\
+#define ASM\
+#include "sim.h"\
+\
+/* This file is automatically generated from EFI332_crt0.c -- DO NOT EDIT */\
+\
+/* note: For one reason or another, I could not get '|' (bit-or) to\
+ work in the version of gas I'm using. I've replaced them with \
+ '+' (addition) for this file. */\
+\
+ .text\
+\
+
+D;
+};
+/include in ram_init.S/,/end include in ram_init.S/ {
+/\*.*= *\(.*\)/ {
+s/*/ .org /
+h;
+s/=.*//
+P;
+g;
+/(.*short int)/ s/.*short int)/ .short /
+/(.*char)/ s/.*char)/ .byte /
+s/\/\*.*\*\///
+t dumby
+:dumby
+s/;//;
+t next
+N;
+s/ *\/\*.*\*\/ *//
+t dumby
+b dumby
+:next
+s/ / /g
+s/ / /
+s/ *\n *//g
+s/|/+/g
+P;
+D;
+}
+P;
+D;
+}
+D;
diff --git a/c/src/lib/libbsp/m68k/efi332/start/start.c b/c/src/lib/libbsp/m68k/efi332/start/start.c
index 5394fb279c..03e98b8195 100644
--- a/c/src/lib/libbsp/m68k/efi332/start/start.c
+++ b/c/src/lib/libbsp/m68k/efi332/start/start.c
@@ -112,7 +112,7 @@ void dumby_start() {
/* see section 7 of the SIM Reference Manual */
#ifdef FLASHWRITE
*CSORBT = (unsigned short int)
- ( BothBytes | ReadWrite | SyncAS | WaitStates_0 | UserSupSpace );
+ ( BothBytes | ReadWrite | SyncAS | WaitStates_2 | UserSupSpace );
#else /* FLASHWRITE */
*CSORBT = (unsigned short int)
( BothBytes | ReadOnly | SyncAS | WaitStates_0 | UserSupSpace );
@@ -185,7 +185,7 @@ void dumby_start() {
/* Port E and F Pin Assignment Register */
/* see section 9 of the SIM Reference Manual */
- *PEPAR = (unsigned char) 0;
+ *PEPAR = (unsigned char) 0xc3; /* siz1|siz0|dsack1|dsack0 */
*PFPAR = (unsigned char) 0;
/* end of SIM initalization code */